Как бы вы сократили XHTML до произвольного количества слов?

Как бы вы программно сократили XHTML до произвольного количества слов, не оставляя незакрытых или поврежденных тегов?

т.е.

<p>
    Proin tristique dapibus neque. Nam eget purus sit amet leo
    tincidunt accumsan.
</p>
<p>
    Proin semper, orci at mattis blandit, augue justo blandit nulla.
    <span>Quisque ante congue justo</span>, ultrices aliquet, mattis eget,
    hendrerit, <em>justo</em>.
</p>

Сокращенно до 25 слов будет:

<p>
    Proin tristique dapibus neque. Nam eget purus sit amet leo
    tincidunt accumsan.
</p>
<p>
    Proin semper, orci at mattis blandit, augue justo blandit nulla.
    <span>Quisque ante congue...</span>
</p>
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
1
0
149
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Выполните рекурсию по дереву DOM, постоянно обновляя переменную количества слов. Когда количество слов превышает максимальное количество слов, вставьте «...» и удалите всех следующих братьев и сестер текущего узла, а затем, возвращаясь вверх по рекурсии, удалите всех следующих братьев и сестер каждого из его предков.

Вы должны думать о XHTML как об иерархии элементов и относиться к ней как к таковой. Это в основном способ обработки XML. Затем просто рекурсивно просмотрите иерархию, добавляя количество слов вместе по ходу. Когда вы достигнете своего предела, выбросьте все остальное.

Я работаю в основном на PHP, и я бы использовал класс DOMDocument в PHP, чтобы помочь мне в этом, вам нужно найти что-то подобное на выбранном вами языке.

Чтобы было понятнее, вот иерархия для вашего образца:

- p
    - Proin tristique dapibus neque. Nam eget purus sit amet leo
      tincidunt accumsan.
- p
    - Proin semper, orci at mattis blandit, augue justo blandit nulla.
    - span
          - Quisque ante congue justo
    - , ultrices aliquet, mattis eget, hendrerit, 
    - em
          - justo
    - .

Вы достигли ограничения в 25 слов внутри элемента span, поэтому вы удалили весь оставшийся текст в диапазоне и добавили многоточие. Все остальные дочерние элементы (как текст, так и теги) могут быть отброшены, а все последующие элементы могут быть отброшены.

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

Конечно, если XHTML, с которым вы имеете дело, изначально недействителен, не ожидайте, что вывод будет действительным.

Извините за пример плохой иерархии, не могу понять, как вкладывать списки.

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