Как бы вы привлекли xhtml к произвольному количеству слов?

StackOverflow https://stackoverflow.com/questions/34394

Вопрос

Как бы вы программно сократили 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, с которым вы имеете дело, недействителен, не ожидайте, что вывод будет действительным.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top