2011-01-01 5 views

ответ

3

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

+1

'текста (') не является функцией, строго говоря. Это * node test *, так же как 'div' в' // div' является узловым тестом. Скобки заключаются в том, чтобы изменить значение '// text'. – Tomalak

+2

Также обратите внимание, что с данным образцом ввода '// div/text()' выбирает два таких текстовых узла: один перед элементом 'p', этот только содержит пробел, второй - после элемента' p' , Поэтому вам может понадобиться '// div/text() [normalize-space()]', чтобы исключить любые чистые текстовые узлы с пробелом. –

0

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

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

//*[not(*)] 

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

1

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

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

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

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

' 
     "text" 
    ' 

В XPath выражений:

/*/text() 

или

/div/text() 

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

' 
     "text" 
    ' 
Смежные вопросы