2008-08-29 59 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

递归通过DOM树,保持一个字计数变量是最新的。当字数超过您的最大字数时,插入“...”并删除当前节点的所有后续兄弟,然后,当您通过递归返回时,删除其每个祖先的所有后续兄弟。

1

您需要将XHTML看作元素的层次结构,并将其视为这样。这基本上是XML意味着要处理的方式。然后,递归地遍历层次结构,随着时间的推移添加单词的数量。当你达到你的极限时,把所有的东西都扔掉。

我主要工作在PHP中,我将使用PHP中的DOMDocument类来帮助我做到这一点,您需要在您选择的语言中找到类似的东西。

为了让事情更清晰,这里是为您的样品层次:

- 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 
    - . 

你打span元素里面的25字的限制,使您免除跨度内所有剩余的文本,并添加省略号。所有其他子元素(文本和标签)都可以丢弃,并且所有后续元素都可以丢弃。

就我所见,这应该总是给你留下有效的标记,因为你将它视为一个层次结构,而不仅仅是纯文本,所有需要的结束标记仍然存在。

当然,如果您所处理的XHTML无效,请不要期望输出有效。

对不起层次结构的例子,无法计算出如何嵌套列表。