Camel Apache: xpath pour en extraire de la valeur de reçu XML
au cours de mon Chameau routes, j'ai une requête à un serveur (un HTTP GET) et comme un résultat, je reçois un 200 OK avec un corps XML recherche similaire comme ceci:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<userProfiles xmlns="http://www.mycompany.com/AEContext/xmldata">
<userProfile name="guest">
<userProfileAttributes>
<userProfileAttribute name="parameter1" value="data1" nameVisibility="ALL"/>
<userProfileAttribute name="parameter2" value="data2" nameVisibility="ALL"/>
<userProfileAttribute name="parameter3" value="data3" nameVisibility="ALL"/>
</userProfileAttributes>
</userProfile>
</userProfiles>
Une idée de comment je pourrais être en mesure d'obtenir la valeur de "paramètre2" dans la partie XML (dans mon exemple "data2") et de stocker cette valeur dans un échange de propriété ? Je suppose que par l'aide d'une expression xpath ? Ou ...
Merci pour votre aide.
OriginalL'auteur opstalj | 2012-03-09
Vous devez vous connecter pour publier un commentaire.
Un moyen facile de récupérer la valeur serait d'utiliser la Langage XPath. Il vous permettra d'extraire les données que vous souhaitez et de définir quelque part (en-tête, corps , ...). Voici comment mettre un paramètre2 - tête avec la valeur:
À l'aide de Java DSL
Un exemple d'utilisation de la Java DSL et paramètre le corps du message:
Pourrait-il être comme ceci: /userprofile/userProfile/userProfileAttributes/userProfileAttribute[@name='paramètre 2']/@value ?
Pour être valable, toute expression XPath doit être pris en charge. J'ai juste extrait le chemin à l'aide de FOXE (firstobject.com/dn_editor.htm)
Pour info: comme le code XML ci-dessus contient un espace de noms, j'ai d'abord nécessaire de définir l'espace de noms dans mon CAMEL route. Puis, plus tard, d'y faire référence lors de l'extraction de données à partir du XML via XPath. Ainsi, dans l'exemple ci-dessus: les espaces de nommage ns = nouveaux espaces de noms ("contextinfo", "mycompany.com/AEContext/xmldata") et, plus tard, d'utiliser quelque chose comme: ns.xpath("//contextinfo:userProfileAttribute[@name='subscriberName']/@value", String.class).
OriginalL'auteur Olivier.Roger