Sélectionnez un seul premier nœud correspondant dans XPath
J'ai le code XML suivant:
<parent>
<pet>
<data>
<birthday/>
</data>
</pet>
<pet>
<data>
<birthday/>
</data>
</pet>
</parent>
Et maintenant, je veux sélectionner le premier anniversaire de l'élément via parent//birthday[1]
mais cela renvoie à la fois d'anniversaire éléments, parce bothof eux sont les premiers enfants de leurs parents.
Comment puis-je sélectionner le premier anniversaire de l'élément de l'ensemble du document, peu importe où il est situé. J'ai essayé parent//birthday[position()=1]
mais cela ne fonctionne pas non plus.
Ce xpath de l'outil/de la bibliothèque que vous utilisez?
OriginalL'auteur Benjamin | 2010-01-29
Vous devez vous connecter pour publier un commentaire.
Vous dire (notez les parenthèses!)
ou, plus courte, mais moins spécifique de variation:
ou, plus sémantique, la date de l'anniversaire de la premier animal de compagnie":
ou, si pas tous les animaux ont l'anniversaire d'entrées, le date de l'anniversaire de la premier animal de compagnie pour laquelle un anniversaire est définie":
Si vous travaillez à partir d'un nœud de contexte, vous pouvez abréger l'expression en rendant par rapport à ce nœud de contexte.
Explication:
/parent/pet/data/birthday[1]
sélectionne tous les<birthday>
nœuds qui sont les premiers de leurs parents (le<data>
nœuds), tout au long du document(/parent/pet/data/birthday)[1]
sélectionne tous les<birthday>
nœuds, et de ces (c'est ce que les parenthèses ne, ils créent un intermédiaire node-set), il prend le premier>éviter l'utilisation de // je suis en supposant qu'il a à utiliser compte tenu de la formulation ici: >Comment puis-je sélectionner le premier anniversaire de l'élément de l'ensemble du document, peu importe où il est situé
J'ai été faire une hypothèse sur la base de l'échantillon d'entrée XML de la structure. Anniversaire des éléments qui ne sont pas des descendants des animaux éléments semblait improbable pour moi dans ce cas.
OriginalL'auteur Tomalak
Pour info: vous pouvez visualiser les résultats des différentes requêtes Xpath avec l' (gratuit) XPathVisualizer outil. Fonctionne uniquement sur Windows.
le texte d'alt http://i50.tinypic.com/f8apd.jpg
Malheureusement, cela ne semble pas être compatible avec Windows 10 64bit
OriginalL'auteur Cheeso
Ok, j'avoue c'est horrible et il doit y avoir une meilleure façon, mais il semble fonctionner.
Je regarde pour tous les éléments au deuxième niveau dans l'arborescence qui ont un descendant de l'élément appelé anniversaire qui n'ont pas de précédent élément frère qui a un anniversaire d'un élément comme un descendant.
pet
éléments avec et sansbirthday
descendants, cela devrait correspondre à tous ceux avec unbirthday
, pas seulement la première.Non, ce ne serait pas parce que le précédent-frère de l'axe ressemble à toutes les précédentes frères et sœurs, et pas seulement l'avant.
OriginalL'auteur Darrel Miller
OriginalL'auteur Igor Nadj
essayer
//
trouve nœuds, peu importe où il ya dans la hiérarchievous pouvez également faire de
Cela ne fonctionne pas pour moi. Il renvoie 2 éléments.
Vrai, mais le problème est que quand je lance mon expression xpath je sais seulement qu'il doit y avoir un couple de l'anniversaire des éléments dans le document, je n'ai pas rien à propos de l'animal de compagnie
Cela ne fonctionne toujours pas avec la position()=1 parce que vous testez la position dans le document original pas dans le node-set résultant
//animal[position()=1]/data/date d'anniversaire qui fonctionne pour moi
OriginalL'auteur carillonator