Есть ли способ указать, что я хочу выбрать только дочерние элементы без тегов (в следующем примере - «текст»)?XPATH фильтр без тегов
<div>
<p>...</p>
"text"
</div>
Есть ли способ указать, что я хочу выбрать только дочерние элементы без тегов (в следующем примере - «текст»)?XPATH фильтр без тегов
<div>
<p>...</p>
"text"
</div>
Функция text()
соответствует текстовым узлам. Пример: //div/text()
- соответствует всем текстам детей во всех div
элементах.
выбрать только тег менее дочерние элементы
Для меня это звучит, как выбрать все элементы , которые не имеют других элементов, как дети. Но опять же, «текст» в вашем примере - , а не элемент, но текстовый узел, поэтому я не совсем уверен, что вы хотите выбрать ... В любом случае, вот решение для выбора таких элементов.
//*[not(*)]
Выбирает все элементы, не имеющие элемента в качестве дочернего элемента. Замените первый * на имя элемента, если вы хотите только выбрать определенные элементы, у которых нет дочерних элементов. Также обратите внимание, что использование //
обычно медленное, поскольку оно проходит через весь документ. По возможности используйте более конкретный путь (например, /div/*[not(*)]
).
Использование:
/*/text()[normalize-space()]
Это выбирает все текстовые узлы, которые являются потомками верхнего элемента документа и не состоят только из пробельных символов.
В конкретном примере это будет выбрать только текстовый узел со значением строки:
'
"text"
'
В XPath выражений:
/*/text()
или
/div/text()
и выберите два текстовые узлы, первый из которых содержит только пробельные и второй такой же текстовый узел, как указано выше:
'
"text"
'
'текста (') не является функцией, строго говоря. Это * node test *, так же как 'div' в' // div' является узловым тестом. Скобки заключаются в том, чтобы изменить значение '// text'. – Tomalak
Также обратите внимание, что с данным образцом ввода '// div/text()' выбирает два таких текстовых узла: один перед элементом 'p', этот только содержит пробел, второй - после элемента' p' , Поэтому вам может понадобиться '// div/text() [normalize-space()]', чтобы исключить любые чистые текстовые узлы с пробелом. –