Concaténer plusieurs valeurs de nœud dans xpath
J'ai un XML qui ressemble à ce
<element1>
<element2>
<element3>
<element4>Hello</element4>
<element5>World</element5>
</element3>
<element3>
<element4>Hello2</element4>
<element5>World2</element5>
</element3>
<element3>
<element4>Hello3</element4>
<element5>World3</element5>
</element3>
</element2>
</element1>
Je suis en train d'utiliser Xpath pour obtenir un résultat comme ceci:
Hello.World
Hello2.World2
Hello3.World3
J'ai utilisé la fonction concat ci-dessous, mais je ne reçois pas de résultat correct.
Fonction Concat:
concat(/element1/element2/element3/element4/text(),".", /element1/element2/element3/element5/text())
Résultat que j'ai obtenu:
Hello.World
Comment puis-je obtenir le résultat correct?
Je suis à l'aide de XPath avec Camel Spring DSL.
Edit:
Solutions en XQuery, XSLT et SPel sont également appréciés.
Modifier
J'ai essayé de chaîne rejoindre et il ne fonctionne pas:
chaîne-fonction join:
string-join((/element1/element2/element3/element4/text(), /element1/element2/element3/element5/text()),".")
Résultat que j'ai obtenu:
Hello.Hello2.Hello3.World.World2.World3
- Dans XPath2.0 il n'y a
string-join
, semble plus approprié de là.. Cependant, ce qui est bien avec XSLT? Je voudrais l'utiliser ici. - Ajouté pour la chaîne-fonction join. Également ajouté XSLT pour les balises et a demandé solution.
- Pour comprendre pourquoi vous obtenez ce résultat: Un node-set est converti en une chaîne de caractères par le retour de la chaîne de valeur du nœud dans le node-set est le premier dans l'ordre du document.
Vous devez vous connecter pour publier un commentaire.
Essayer cette expression...
//element3/string-join(element4 | element5, ".")
, et si vous devez avoir une seule chaîne de caractères comme un résultat, alors,string-join(//element3/string-join(element4 | element5, "."), "
")
est une autre formulation, qui à mon humble avis est plus lisible.J'ai utilisé la méthode concat et fonctionne bien.
Voici une solution avec
XSLT
:string-join()
est disponible uniquement pour les XPath2.0. C'est pourquoi j'ai proposé d'utiliser XSLTfor $d in $doc/element2/element3
.return fn:string-join(fn:data($d/element()), ".")
$doc magasins le Xml.