Quelqu'un sait-il comment obtenir la position d'un nœud en utilisant xpath?
Disons que j'ai le XML suivant:
<a>
<b>zyx</b>
<b>wvu</b>
<b>tsr</b>
<b>qpo</b>
</a>
Je peux utiliser la requête xpath suivante pour sélectionner le troisième <b> nœud (<b> tsr </b>):
a/b[.='tsr']
Ce qui est bien beau mais je veux retourner la position ordinale de ce nœud, quelque chose comme:
a/b[.='tsr']/position()
(mais un peu plus de travail!)
Est-ce même possible?
edit : J'ai oublié de mentionner que j'utilise .net 2, donc c'est xpath 1.0!
Mise à jour : Ended à l' aide de James Sulak de excellente réponse . Pour ceux qui sont intéressés, voici mon implémentation en C #:
int position = doc.SelectNodes("a/b[.='tsr']/preceding-sibling::b").Count + 1;
// Check the node actually exists
if (position > 1 || doc.SelectSingleNode("a/b[.='tsr']") != null)
{
Console.WriteLine("Found at position = {0}", position);
}
Réponses:
Essayer:
la source
Vous pouvez le faire avec XSLT mais je ne suis pas sûr de XPath pur.
la source
Je me rends compte que le poste est ancien .. mais ..
remplacer l'astérisque par le nom du nœud vous donnerait de meilleurs résultats
au lieu de
la source
Si jamais vous mettez à niveau vers XPath 2.0, notez qu'il fournit un index de fonction , cela résout le problème de cette façon:
Où:
la source
Contrairement à ce qui a été dit précédemment, «précédent-frère» est vraiment l'axe à utiliser, et non «précédent» qui fait quelque chose de complètement différent, il sélectionne tout dans le document qui est avant la balise de début du nœud courant. (voir http://www.w3schools.com/xpath/xpath_axes.asp )
la source
Juste une note à la réponse faite par James Sulak.
Si vous souhaitez prendre en compte le fait que le nœud peut ne pas exister et que vous souhaitez le conserver purement XPATH, essayez ce qui suit qui renverra 0 si le nœud n'existe pas.
la source
Le problème est que la position du nœud ne signifie pas grand-chose sans contexte.
Le code suivant vous donnera l'emplacement du nœud dans ses nœuds enfants parents
la source
Je fais beaucoup de choses sur Novell Identity Manager, et XPATH dans ce contexte est un peu différent.
Supposons que la valeur que vous recherchez se trouve dans une variable de chaîne, appelée TARGET, alors XPATH serait:
De plus, il a été souligné que pour économiser quelques caractères d'espace, les éléments suivants fonctionneraient également:
J'ai également publié une version plus jolie de ceci sur Cool Solutions de Novell: Utilisation de XPATH pour obtenir le nœud de position
la source