Использование XPath: найдите последний текстовый узел каждого абзаца под корневым узлом

Я хочу обрезать конечные пробелы в конце всех абзацев 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)?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
3
0
6 951
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

который дает только последний результат, он хочет, чтобы все они по всему документу

Jake 03.11.2008 07:08

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

nickf 03.11.2008 07:12

@nickf: Вы правы. Когда вы сказали, что это сработало, я пошел и дважды проверил. Это показывает, что проблема, по-видимому, связана с реализацией XPath в библиотеке Ruby REXML. Ну, я не скажу этого, пока не займусь дальнейшим исследованием. Может быть настройка, которую мне нужно передать в REXML (или что-то в этом роде)

Diego Barros 03.11.2008 07:33

Извините, я должен был упомянуть, что использую Ruby и REXML. Я ошибочно предположил, что XPath будет просто XPath.

Diego Barros 03.11.2008 07:35

Похоже, это ошибка в REXML.

Diego Barros 04.11.2008 10:57

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

Спасибо за ответ. Может ли normalize-space () или аналогичная функция удалить только конечные пробелы (оставив только начальные пробелы)?

Diego Barros 03.11.2008 11:07

Другие вопросы по теме