你如何将XHTML分成任意数量的单词?

时间:2008-08-29 14:51:11

标签: html regex dom xhtml dom-traversal

您如何在不留下未关闭或损坏的标签的情况下,将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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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开头无效,请不要期望输出有效。

很抱歉这个糟糕的层次结构示例,无法解决如何嵌套列表。