Как бы вы привлекли xhtml к произвольному количеству слов?
-
09-06-2019 - |
Вопрос
Как бы вы программно сократили 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>
Решение
Завершите через дерево 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 слов внутри элемента пролета, поэтому вы удаляете все оставшиеся текст в течение пролета и добавляете эллипсис. Все остальные детские элементы (как текст, так и теги) могут быть отброшены, и все последующие элементы могут быть отброшены.
Насколько я вижу, это всегда должно оставлять вам действительную разметку, потому что вы рассматриваете ее как иерархию, а не просто простой текст, все необходимые теги, которые требуются, все равно будут там.
Конечно, если с самого начала, если xhtml, с которым вы имеете дело, недействителен, не ожидайте, что вывод будет действительным.
Извините за пример плохой иерархии, не мог понять, как гнездовать списки.