Как сопоставить второй / последующие текстовые узлы с XPath - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть этот HTML:

<div>
  foo
  <span>bar</span>
  baz
</div>
<div>bazinga</div>

Я могу использовать выражение XPath //div[normalize-space(text())='foo'] для соответствия узлу <div>.

Но что, если я не знаю foo но я знаю baz - есть ли способ сопоставить узел по его второму / третьему текстовому узлу?

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете индексировать узел, которому хотите соответствовать:

//div[normalize-space(text()[2])='baz']

Вышеупомянутое выражение соответствует второму text() дочернему элементу div элементов.

Другой (более конкретный) вариант таков:

//div[normalize-space(text()[1]) = 'baz' or text()/normalize-space(following-sibling::text()) = 'baz']

При этом проверяется первое нормализованное значение text() и после этого все нормализованные последующие братья и сестры для значения baz.Но это работает только с XPath-2.0, поэтому я не упоминал об этом раньше.

Во всех трех случаях результат для вашего примера:

<?xml version="1.0"?>    
foo
bar
baz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...