XPath для выбора всех узлов, в которых есть текст, который отличается от текста в их дочерних узлах - PullRequest
0 голосов
/ 11 февраля 2020

Какой самый эффективный способ выбрать все узлы, где текст в этом узле отличается от его дочерних узлов.

Итак, допустим, есть тег h1 с диапазоном внутри. Я вообще не хочу захватывать тег H1, если он выглядит так:

<h1><span>hello</span></h1>

Я бы только хотел поймать промежуток.

Если это было

<h1><span>Hello</span> World</h1>

Мне нужно захватить их отдельно. Таким образом, текст H1 будет только World, а текст span будет Hello.

До сих пор я пытался

//*[normalize-space()], но он получает все элементы, которые не являются желаемым результатом.

Возможно ли сделать каждый элемент сиротой, чтобы html просто стал документом 0- root, где каждый узел находится в своем собственном узле и не имеет родителя?

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Ваш вопрос не совсем понятен: что вы хотите сделать с

<p><b>Hello</b><i>World</i></p>

и с

<p><b>Hello</b> <i>World</i></p>

?

Но я думаю, что вы ' По сути, мы ищем элементы, которые имеют дочерние текстовые узлы (или, возможно, непробельные дочерние текстовые узлы), которые были бы

//*[text()]

или

//*[text()[normalize-space()]

соответственно

0 голосов
/ 11 февраля 2020

Если я правильно понял вопрос, это выражение xpath

//self::node()/text()

должно выводить Hello и World отдельно. Попробуйте это на своем фактическом коде и посмотрите, работает ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...