Как я могу игнорировать первый элемент и получать остальные элементы?
<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>
Спасибо
Ответ 1
если вы хотите игнорировать только первый элемент:
//li[position()>1]
or
(//a)[position()>1]
если вы хотите только последнее (например, ваш пример):
//li[last()]
or
(//a)[last()]
Ответ 2
Вы можете использовать position(), чтобы пропустить "первый", но в зависимости от того, какой элемент вам интересен и каков контекст, вам может потребоваться небольшое изменение в вашем XPATH.
Например, если вы хотите адресовать все элементы li и получить все, кроме первого, вы можете использовать:
//li[position()>1]
и он будет работать как ожидалось, возвращая все элементы li, кроме первого.
Однако, если вы хотите обратиться ко всем элементам a, вам нужно немного изменить XPATH. В контексте выражения //a[position()>1] каждый из элементов a будет иметь position() из 1 и last() будет оценивать значение true. Таким образом, он всегда будет возвращать каждый a и не пропускает первый.
Вам нужно обернуть выражение, которое выберет a в скобках, чтобы сгруппировать их в node -set, затем применить фильтр предикатов в позиции.
(//a)[position()>1]
В качестве альтернативы вы также можете использовать выражение, подобное этому:
//a[preceding::a]
Это найдет все a элементы, кроме первого (так как нет a, предшествующего первому).