Как игнорировать первый элемент в xpath - PullRequest
42 голосов
/ 14 апреля 2010

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

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

Спасибо

Ответы [ 2 ]

87 голосов
/ 14 апреля 2010

, если вы хотите игнорировать «первый» элемент только тогда:

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

, если вы хотите только последнее (как ваш пример предлагает):

//li[last()]
or
(//a)[last()]
12 голосов
/ 14 апреля 2010

Вы можете использовать position(), чтобы пропустить «первый», но в зависимости от того, какой элемент вас интересует и каков контекст, вам может потребоваться небольшое изменение вашего XPATH.

Например, если вы хотите обратиться ко всем элементам li и получить все, кроме первого, вы можете использовать:

//li[position()>1]

и все будет работать как положено, возвращая все элементы li, кроме первого.

Однако, если вы хотите обратиться ко всем элементам a, вам нужно немного изменить XPATH. В контексте выражения //a[position()>1] каждый из элементов a будет иметь position(), равный 1, а last() будет иметь значение true. Таким образом, он всегда будет возвращать каждый a и не будет пропускать первый.

Вам нужно обернуть выражение, которое выбирает a в скобках, чтобы сгруппировать их в набор узлов, а затем применить фильтр предикатов к позиции.

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

В качестве альтернативы вы также можете использовать выражение вроде этого:

//a[preceding::a]

Это найдет все элементы a, кроме первого (поскольку перед первым элементом нет a).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...