xpath выбор элементов между двумя узлами

#xpath

#xpath

Вопрос:

Это мой HTML:

 <table dir = "rtl .......">
<tbody>
<script src = "get.aspx?type=jsamp;file=ajaxamp;rev=3"......>
<script language = "JavaScript" src = "get.aspx?type=jsamp;file=mcamp;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:

Путь к 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 чтобы получить пересечение между двумя узлами.

Комментарии:

1. По состоянию на 18.02.2020 ссылка мертва.