Xpath выберите следующий (номер) брат внутри якорной справки - PullRequest
3 голосов
/ 13 февраля 2010

Извините заранее, если я не объясню это ясно. Я сделаю все возможное, чтобы уточнить, что я пытаюсь сделать. Без лишних слов ... Предположим, у вас есть серия чисел на странице (разделенных только пробелом), где скобки указывают текущую страницу, на которой вы находитесь.

На странице это выглядит так:

[1] 2 3

HTML выглядит так:

<tr>
<td>

[<a href='link1.php'>1</a>] <a href='link2.php'>2</a> <a href='link3.php'>3</a> 

</td>
</tr>

Я просто пытаюсь выбрать номер следующей страницы на основе текущего. Я полагаю, что мне нужно использовать какую-то форму «следующего брата», но все, что я придумал, это // tr / td / a / follow-sibling :: a [1], что явно неверно. Он выбирает 2, когда на странице 1, но не 3, когда на странице 2, как ожидалось. Я бы попытался использовать [text () [содержит (., '[')]], Чтобы выбрать текущую страницу, но скобки находятся вне якоря, а не внутри. Ик!

Было бы очень полезно, если бы вы могли объяснить мыслительный процесс вместе со своим решением, а не просто вставить ответ. Ждем вашей помощи.

1 Ответ

6 голосов
/ 13 февраля 2010

Следующая страница после 2 будет найдена:

//tr/td/a[.='2']/following-sibling::a[1]

Сначала мы выбираем текущую страницу на основе содержимого строки //tr/td/a[.='2'], а оттуда выбираем первого следующего брата.

Чтобы сделать это, не зная текущей страницы, вместо этого мы выберем элемент a, следующий за «]».

//tr/td/text()[']'=normalize-space(.)]/following-sibling::a[1]

А в случае отсутствия текущей страницы мы по умолчанию используем первый элемент.

//tr/td/( text()[']'=normalize-space(.)]/following-sibling::a | a )[1]
...