2008-08-29 11 views
1

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

ответ

1

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

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^