Используя XPath: найдите последний текстовый узел каждого абзаца под корневым узлом - PullRequest
3 голосов
/ 03 ноября 2008

Я хочу обрезать конечные пробелы в конце всех абзацев XHTML. Я использую Ruby с библиотекой REXML.

Допустим, у меня есть следующее в действительном файле XHTML:

<p>hello <span>world</span> a </p>
<p>Hi there </p>
<p>The End </p>

Я хочу закончить с этим:

<p>hello <span>world</span> a</p>
<p>Hi there</p>
<p>The End</p>

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

Я начал со следующей XPath:

//root/p/child::text()

Конечно, проблема здесь в том, что он возвращает все текстовые узлы, которые являются потомками всех p-тегов. Что это такое:

'hello '
' a '
'Hi there '
'The End '

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

//root/p/child::text()[last()]

Это только возвращает: 'The End '

Поэтому я хотел бы получить от XPath:

' a '
'Hi there '
'The End '

Могу ли я сделать это с XPath? Или мне стоит подумать об использовании регулярных выражений (это скорее головная боль, чем XPath)?

Ответы [ 2 ]

7 голосов
/ 03 ноября 2008

Ваш пример сработал для меня

//p/child::text()[last()]
1 голос
/ 03 ноября 2008

На тот случай, если вы не знали, XSL имеет функцию normalize-space(), которая избавит от пробелов в начале и в конце.

...