выберите диапазоны узлов, используя XPath - PullRequest
0 голосов
/ 30 июля 2009

Мы используем XPath в приложении Java, и мне было интересно: как выбрать набор узлов, где «конечная точка» - это узел, не принадлежащий к тому же виду, что и его братья и сестры.

Например, я хочу получить два набора <a> тегов размером 3 и 2 из приведенного ниже примера:

<sample>
   <a />
   <a />
   <a />
   <terminating />
   <a />
   <a />   
</sample>

Ответы [ 2 ]

1 голос
/ 30 июля 2009

Прежде всего, результатом выражения XPath всегда является либо атомарное значение, либо один набор узлов (или последовательность в XPath 2.0). Вы не можете получить список наборов узлов.

Тем не менее, для вашего конкретного примера с двумя группами и одним терминатором вы можете просто использовать preceding-sibling и following-sibling:

/sample/terminating/preceding-sibling::a
/sample/terminating/following-sibling::a
0 голосов
/ 30 июля 2009

Продолжая ответ Павла Минаева, я бы написал цикл, например, так: "i" - индекс цикла:

  • найти все <terminating> узлы с помощью
    & Rarr; /sample/terminating
  • для каждого из них, найдите все
    & Rarr; ./preceding-sibling::a[count(preceding-sibling::terminating) = {i}]
  • для последнего <terminating> узла, также найдите
    & Rarr; ./following-sibling::a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...