92 votes

Trouve la position d’un nœud à l’aide de xpath

Quelqu'un sait comment obtenir la position d'un nœud à l'aide de xpath?

Dire que j'ai le code 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 la troisième <b> node (<b>tsr</b>):

a/b[.='tsr']

Ce qui est bien et bon, mais je veux revenir à la position ordinale de ce nœud, quelque chose comme:

a/b[.='tsr']/position()

(mais en un peu plus de travail!)

Est-il même possible?

edit: j'ai Oublié de mentionner le matin à l'aide .net 2 il est donc xpath 1.0!


Mise à jour: Fini à l'aide de James, Sulak's excellente réponse. Pour ceux qui sont intéressés, voici mon application 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);
}

103voto

James Sulak Points 9959

Essayer:

 count(a/b[.='tsr']/preceding-sibling::*)+1.
 

9voto

Steven Huwig Points 8029

Vous pouvez faire cela avec XSLT, mais je ne suis pas sûr de droite XPath.

9voto

user414661 Points 394

Je me rends compte que le post est ancien... mais...

replace'ing l’astérisque par le nodename vous donnerait de meilleurs résultats

Au lieu de

3voto

Damien Points 1431

Contrairement à indiqué précédemment « preceding-sibling » est vraiment l’axe à utiliser, ne pas « précédent » qui fait quelque chose de complètement différent, il choisit tout dans le document qui se trouve avant la balise de début du nœud actuel. (voir http://www.w3schools.com/xpath/xpath_axes.asp)

0voto

Andrew Cox Points 5458

Le problème est que la position du nœud ne signifie pas grand-chose sans un contexte.

Le code suivant vous donnera l’emplacement du nœud dans ses nœuds parents de l’enfant

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X