XPath - как выделить текст - PullRequest
2 голосов
/ 07 декабря 2010

Как мне получить The quick brown fox. в следующем документе:

<a>
   <b>
      Hello
      <c/>
      World
   </b>
   The quick brown fox.
</a>

Ответы [ 3 ]

4 голосов
/ 07 декабря 2010

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

Универсальное решение:

/a/text()[normalize-space()][1]

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

Другие возможности:

/a/text()[last()]

Значение: последний дочерний узел текстового a корневого элемента

1 голос
/ 07 декабря 2010

text() выбирает все дочерние текстовые узлы текущего узла, поэтому /a/text() - это путь.Просто помните, что вам может потребоваться выполнить некоторые манипуляции со строками в результатах, потому что XML, подобный этому:

<a>
   <b>
      Hello
      <c/>
      World
   </b>
   The quick <!--comment--> brown fox.
</a>

вернет два текстовых узла («быстрый» и «коричневый лис»).Кроме того, текстовые значения будут содержать пробелы (например, новая строка после </b> и перед "the").

0 голосов
/ 07 декабря 2010

Вы можете начать с / a / text (). Вы получите только тексты узлов, а не теги.

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