Фильтр XPATH без тегов детей - PullRequest
2 голосов
/ 01 января 2011

Можно ли указать, что я хочу выбрать только дочерние элементы без тегов (в следующем примере - "текст")?

<div>
   <p>...</p>
   "text"
</div>

Ответы [ 3 ]

3 голосов
/ 01 января 2011

Функция text() соответствует текстовым узлам. Пример: //div/text() - соответствует всем текстовым дочерним элементам всех элементов div.

1 голос
/ 01 января 2011

Использование :

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

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

В конкретном примере будет выбран только текстовый узел со строковым значением :

'
       "text"
    '

Выражения XPath:

/*/text()

или

/div/text()

оба выбирают два текстовых узла, первый из которых содержит только пробел, а второй - тот же текстовый узел, что и выше:

'
       "text"
    '
0 голосов
/ 01 января 2011

выбрать только дочерние элементы без тегов

Для меня это звучит как выделение всех элементов , которые не имеют других элементов в качестве дочерних.Но опять же, «текст» в вашем примере это не элемент, а текстовый узел, так что я не совсем уверен, что вы хотите выбрать ... В любом случае, вот решение для выбораsuch elements .

//*[not(*)]

Выбирает все элементы, у которых нет дочерних элементов.Замените первый * на имя элемента, если вы хотите выбрать только те элементы, которые не имеют дочерних элементов.Также обратите внимание, что использование // обычно медленное, поскольку оно проходит через весь документ.Попробуйте по возможности использовать более конкретный путь (например, /div/*[not(*)] в этом случае).

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