2013-12-21 4 views
0

В чем смысл использования text() с индексом: text()[index]?xpath - text() [index] use

я заметил, что //p/text[2] получает меня только paragraph text в этом примере:

<p> 
    <strong>important text</strong> 
    paragraph text 
</p> 

ответ

1

Ваш p элемент узел имеет три дочерних узла:

  1. в text узел с белым пространством
  2. узел strong
  3. text узел с белым пространством, затем paragraph text с последующим пробелом

Если вы используете //p/text(), вы выбираете все text дочерние узлы, используя //p/text()[2] вы выбираете второй text дочерний узел (который является третьим дочерний узел с учетом всех вид узлов).

+0

Мой плохой, я забыл, что пробел перед 'strong' считается текстовым узлом. Из вашего ответа я понимаю, что 'text()' может быть фрагментирован (разделен), когда между текстом существуют другие теги (например, strong или b) '. – h4k1m

+1

@ h4k1m, элемент может иметь смешанный контент, где текст смешивается с дочерними элементами элемента. Один текстовый узел не фрагментирован или не разделен. '// p/text()' выбирает несколько текстовых узлов (два в образце), так же как '// p/*' выбирает все дочерние элементы (в образце есть только один экземпляр, но если бы их было больше, несколько). –

Смежные вопросы