您如何将 XHTML 缩写为任意数量的单词?

How would you abbriviate XHTML to an arbitrary number of words?

提问人:Nick Higgs 提问时间:8/29/2008 最后编辑:eLRuLLNick Higgs 更新时间:12/17/2017 访问量:170

问:

如何以编程方式缩写为任意数量的单词,而不会留下未关闭或损坏的标签?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>
html 正则表达 xhtml dom-遍历

评论


答:

1赞 levand 8/29/2008 #1

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

1赞 Robin Barnes 8/29/2008 #2

您需要将 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 一开始就无效,请不要期望输出是有效的。

对不起,层次结构示例不佳,无法弄清楚如何嵌套列表。