How to ignore first element in xpath

Xpath

Xpath Problem Overview


How can I ignore first element and get rest of the elements?

<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>

Thanks

Xpath Solutions


Solution 1 - Xpath

if you want to ignore the "first" element only then:

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

if you want the last only (like your example seems to suggest):

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

Solution 2 - Xpath

You can use position() to skip over the "first" one, but depending on which element you are interested in and what the context is, you may need a slight variation on your XPATH.

For instance, if you wanted to address all of the li elements and get all except the first, you could use:

//li[position()>1]

and it would work as expected, returning all of the li elements except for the first.

However, if you wanted to address all of the a elements you need to modify the XPATH slightly. In the context of the expression //a[position()>1] each one of the a elements will have a position() of 1 and last() will evaluate to true. So, it would always return every a and would not skip over the first one.

You need to wrap the expression that selects the a in parenthesis to group them in a node-set, then apply the predicate filter on position.

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

Alternatively, you could also use an expression like this:

//a[preceding::a]

That will find all a elements except the first one (since there is no a preceding the first one).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionpriyankView Question on Stackoverflow
Solution 1 - Xpatht00nyView Answer on Stackoverflow
Solution 2 - XpathMads HansenView Answer on Stackoverflow