2008-08-29 48 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無效,請不要期望輸出有效。

對不起層次結構的例子,無法計算出如何嵌套列表。