XPath для поиска текстового узла, который является родственным узлом других узлов - PullRequest
2 голосов
/ 21 апреля 2010

Учитывая следующий фрагмент HTML:

<fieldset>
  <legend>My Legend</legend>
  <p>Some text</p>
  Text to capture
</fieldset>

Есть ли выражение xpath, которое будет возвращать только текстовый узел 'Text to capture'?

Попытка

/fieldset/text()
дает три узла, а не только тот, который мне нужен.

Ответы [ 2 ]

7 голосов
/ 21 апреля 2010

Я рекомендую вам принять ответ Стивена Д. Маевского, но вот объяснение (узлы текста выделены квадратными скобками):

<fieldset>[
  ]<legend>My Legend</legend>[
  ]<p>Some text</p>[
  Text to capture
]</fieldset>

так /fieldset/text() возвращает

  • "\n "
  • "\n "
  • "\n Text to capture\n"

И именно поэтому вы хотите /fieldset/text()[normalize-space()], и вы хотите, чтобы результат был обрезан перед использованием.

Также обратите внимание, что вышеприведенное сокращенно для /fieldset/text()[normalize-space(.) != '']. Когда normalize-space() возвращает непустую строку, предикат оценивается в true, тогда как пустая строка оценивается в false.

7 голосов
/ 21 апреля 2010

Предполагается, что вам нужен текстовый узел, содержащий текст без пробелов:

//fieldset/text()[normalize-space(.)]

Если вы хотите последний текстовый узел, то:

//fieldset/text()[last()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...