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