web-dev-qa-db-fra.com

Comment ignorer le premier élément de xpath

Comment puis-je ignorer le premier élément et obtenir le reste des éléments?

<ul>
  <li><a href="#">some link</a></li>
  <li><a href="#">some link 2</a></li>
  <li><a href="#">link i want to find</a></li>
</ul>

Merci

47
priyank

si vous souhaitez ignorer le "premier" élément uniquement:

//li[position()>1]
or
(//a)[position()>1] 

si vous ne voulez que le dernier (comme votre exemple semble le suggérer):

//li[last()]
or
(//a)[last()]
87
t00ny

Vous pouvez utiliser position() pour sauter le "premier", mais selon l'élément qui vous intéresse et le contexte, vous aurez peut-être besoin d'une légère variation sur votre XPATH.

Par exemple, si vous vouliez adresser tous les éléments li et obtenir tout sauf le premier, vous pourriez utiliser:

//li[position()>1]

et cela fonctionnerait comme prévu, renvoyant tous les éléments li à l'exception du premier.

Cependant, si vous souhaitez traiter tous les éléments a, vous devez modifier légèrement le XPATH. Dans le contexte de l'expression //a[position()>1] chacun des éléments a aura une position() de 1 et last() sera évalué à vrai. Ainsi, il retournerait toujours tous les a et ne sauterait pas le premier.

Vous devez encapsuler l'expression qui sélectionne a entre parenthèses pour les regrouper dans un ensemble de nœuds, puis appliquer le filtre de prédicat sur la position.

(//a)[position()>1]

Alternativement, vous pouvez également utiliser une expression comme celle-ci:

//a[preceding::a]

Cela trouvera tous les éléments a sauf le premier (puisqu'il n'y a pas de a précédant le premier).

12
Mads Hansen