xpath выбирает элементы между двумя узлами - PullRequest
1 голос
/ 31 октября 2011

Это мой HTML:

<table dir = "rtl .......">
<tbody>
<script src = "get.aspx?type=js&file=ajax&rev=3"......>
<script language = "JavaScript" src = "get.aspx?type=js&file=mc&rev=6"></script>
<script>..</script>
<tr>
  <td class = "d2"...>..</td>
</tr>
<tr>..</tr> <--
<tr>..</tr> <--
<tr>..</tr> <-- these elements
<tr>..</tr> <--
<tr>..</tr> <--
<tr>..</tr> <--
<tr>..</tr> <--
<tr>
  <td class = "d2"...>..</td>
</tr>
<script>..</script>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>

Как бы подсчитать или выбрать все <tr> элементы между двумя <td> элементами, чей идентификатор равен d2?

1 Ответ

3 голосов
/ 01 ноября 2011

xpath будет длинным, поэтому приготовьтесь:

count(//tr[preceding-sibling::tr/td[@class = 'd2']][count(.|//tr[following-sibling::tr/td[@class = 'd2']])=count(//tr[following-sibling::tr/td[@class = 'd2']])])

Чтобы выбрать действительные узлы, а не только счет, просто удалите первый счет:

//tr[preceding-sibling::tr/td[@class = 'd2']][count(.|//tr[following-sibling::tr/td[@class = 'd2']])=count(//tr[following-sibling::tr/td[@class = 'd2']])]

Здесь происходят разные вещи, в частности:

  • Выберите начальный узел, выбрав предшествующий дочерний узел родного брата tr / td с id = '2'
  • Выберите конечный узел, выбрав следующий дочерний узел брата tr / td с id = '2'
  • Используйте метод Кейсиана: http://www.dpawson.co.uk/xsl/sect2/muench.html#d9940e108, чтобы получить пересечение между двумя узлами.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...