Подтвердить что ты не робот

Как игнорировать первый элемент в xpath

Как я могу игнорировать первый элемент и получать остальные элементы?

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

Спасибо

4b9b3361

Ответ 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, предшествующего первому).