Comment utiliser le “traduire” fonction Xpath sur un node-set
J'ai un document XML qui contient des éléments avec des tirets j'aimerais bande
par exemple
<xmlDoc>
<items>
<item>a-b-c</item>
<item>c-d-e</item>
<items>
</xmlDoc>
Je sais que je peux trouver remplacer un seul élément à l'aide de cette xpath
/xmldoc/items/item[1]/translate(text(),'-','')
Qui sera de retour
"abc"
cependant, comment dois-je procéder pour l'ensemble?
Cela ne fonctionne pas
/xmldoc/items/item/translate(text(),'-','')
Ni ce
translate(/xmldoc/items/item/text(),'-','')
Est-il un moyen d'y parvenir?
- Je ne pense pas que ce soit possible (en supposant que XPath 1.0 comme par traduire). L'Utilisation De XPath 2.0.
- Bonne question, +1. Voir ma réponse pour un court laps de XPath 2.0 one-liner solution. 🙂
Vous devez vous connecter pour publier un commentaire.
Cela ne peut être fait avec un simple expression XPath 1.0.
Utiliser la suite de XPath 2.0 expression pour produire une séquence de chaînes, chacune étant le résultat de l'application de la
translate()
fonction de la chaîne de valeur du noeud correspondant:/xmlDoc/items/item/translate(.,'-', '')
pourquoi ne pas utilisertext()
? demandant des connaissances à acquérir but pour moi-même...
est utilisé,il est le nœud de contexte..droit? alors sur ce nœud de contextestring()
fonction est appliquée.. suis-je la corriger?"//txt()"
les nœuds de texte..,Mais je veux utilisernormalize-space
,à dépouiller les textes lors de la sélection,comment le faire? s'il vous plaît aider..!text()
-- pastxt()
.Dans XPath 2.0 on peut écrire://text()/normalize-space(.)
<div> Hello<br>My name is McOmghall</br> </div>
.. et je veux de la sortie commeHello My name is McOmghall
.. j'ai Donc utiliséstring(//div)
.. Mais c'est pas donner.. que cela peut être fait en utilisantxpath1.0
?La
translate
fonction accepte en entrée un chaîne et pas un node-set. Cela signifie que le fait d'écrire quelque chose comme:ou
entraînera dans un appel de fonction sur le premier nœud (
item[1]
).Dans XPath 1.0 je pense que vous n'avez pas d'autres chances de faire quelque chose de laid comme:
Qui est privatif pour une vaste liste d'éléments et de retourne simplement une chaîne.
Dans XPath 2.0 cela peut être résolu bien à l'aide de pour les expressions:
Qui renvoie une type de séquence:
PS Ne pas confondre les appels de fonction avec emplacement des chemins. Ils sont différents de ce type d'expressions, et dans XPath 1.0 peuvent pas être mélangés.