Как бы вы сократили XHTML до произвольного числа слов? - PullRequest
1 голос
/ 29 августа 2008

Как бы вы запрограммировали сокращение 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>

Ответы [ 2 ]

1 голос
/ 29 августа 2008

Вы должны думать о 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, поэтому вы удаляете весь оставшийся текст внутри span и добавляете многоточие. Все остальные дочерние элементы (как текст, так и теги) могут быть отброшены, а все последующие элементы могут быть отброшены.

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

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

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

1 голос
/ 29 августа 2008

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

...