1

您将如何以编程方式缩写XHTML为任意数量的单词而不留下未封闭或损坏的标签?

IE

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

2 回答 2

1

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

于 2008-08-29T14:59:06.783 回答
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 个字的限制,因此您删除了 span 中所有剩余的文本并添加了省略号。可以丢弃所有其他子元素(文本和标签),并且可以丢弃所有后续元素。

据我所知,这应该始终为您留下有效的标记,因为您将其视为层次结构而不仅仅是纯文本,所有需要的结束标记仍将存在。

当然,如果您正在处理的 XHTML 一开始就无效,请不要期望输出是有效的。

对不起,糟糕的层次结构示例,无法解决如何嵌套列表。

于 2008-08-29T15:09:06.493 回答