Avoir le XML suivant:
<node>Text1<subnode/>text2</node>
Comment sélectionner le premier ou le deuxième nœud de texte via XPath?
Quelque chose comme ça:
/node/text()[2]
bien sûr ne fonctionne pas car c'est le résultat fusionné de chaque texte à l'intérieur du nœud.
/node/text()[2]
[...] ne fonctionne pas parce que c'est le résultat fusionné de chaque texte à l'intérieur du nœud C'est faux: cela signifie le deuxième nœud de texte enfant denode
l'élément racine . La valeur de la chaîne (concaténation des nœuds de texte descendants) seraitstring(/node)
Réponses:
Utilisez :
Ceci sélectionne tous les enfants de noeud de texte de l'élément supérieur (nommé «noeud») du document XML.
Ceci sélectionne le premier enfant de noeud de texte de l'élément supérieur (nommé «noeud») du document XML.
Ceci sélectionne le deuxième enfant de noeud de texte de l'élément supérieur (nommé «noeud») du document XML.
Cela sélectionne le nœud de texte someInteger-ième enfant de l'élément supérieur (nommé "nœud") du document XML. C'est équivalent à l'expression XPath suivante:
la source
/node[2]
ne doit sélectionner aucun nœud si le document XML source est bien formé. Par définition, dans un document XML bien formé, il n'y a qu'un seul élément supérieur - également connu sous le nom dedocument-element
//*[text()]
toute façon./html/text()
ne marche pas./html/text()
ne sélectionne pas tous les nœuds de texte dans le document - uniquement les nœuds de texte qui sont des enfants (et non des descendants) de l'html
élément supérieur . Vous voulez probablement/html//text()
. Une certaine connaissance et compréhension de XPath est généralement requise pour construire des expressions XPath.votre xpath devrait fonctionner. J'ai testé votre xpath et le mien dans l'implémentation MarkLogic et Zorba Xquery / Xpath.
Les deux devraient fonctionner.
la source