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