Подтвердить что ты не робот

Выделите текст только в узле, а не в дочерних узлах.

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

<div id="comment">
     <div class="title">Editor Description</div>
     <div class="changed">Last updated: </div>
     <br class="clear">
     Lorem ipsum dolor sit amet.
</div>

Другими словами, я хочу, чтобы Lorem ipsum dolor sit amet. а не Editor DescriptionLast updated: Lorem ipsum dolor sit amet.

4b9b3361

Ответ 1

В предоставленном XML-документе:

<div id="comment">
      <div class="title">Editor Description</div>
      <div class="changed">Last updated: </div>
      <br class="clear">
      Lorem ipsum dolor sit amet. 
</div> 

верхний элемент /div имеет 4 дочерних узла, которые являются текстовыми узлами. Первые три из этих четырех детей text-node - whitespace-only. Последний из этих 4 text-node детей - это тот, который вам нужен.

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

/div/text()[last()]

Это отличается от:

/div/text()

Последнее может (в зависимости от того, сохраняются ли узлы whitespace-only парсером XML), выбрать все 4 текстовых узла, но вы хотите только последний из них.

Альтернатива (если вы точно не знаете, какой text-node вы хотите):

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

Это выбирает все text-node-children из /div, которые не являются whitespace-only текстовыми узлами.

Ответ 2

Просто выберите text() вместо .:

div/text()

В данном фрагменте XML это возвращает:

Lorem ipsum dolor sit amet.

Ответ 3

Как насчет:
$doc/node()[3]/text()
Предполагая, что $doc имеет xml.