2012-01-03 65 views
0

我面臨的問題是我在XML中有一個字符串的節點,代表HTML。 我需要削減該字符串,但是,當然,這可能導致在invalide HTML的標記(例如,如果我切字符串總是後30個字符我很容易失去閉元件等</ul>等)。 怎麼辦? 這似乎是非常困難的,因爲我沒有通過谷歌找到真正的幫助。XSLT:將字符串解析爲XML節點集(concret:將HTML-String轉換爲節點集)?

我的想法至今:以「分析字符串」和正則表達式選擇節點和內容,並把它們寫上課XML元素節點。 但是我遇到很大的問題來處理所有情況,特別是嵌套節點。

有人有一些想法嗎?

FYI:我的記事本:

  1. 正則表達式:抓住第一個標籤
  2. 第一個節點的讀標記名
  3. 認沽標記名正則表達式和搜索整個標籤,還可以選擇字符串的其餘部分(去請稍後再試)
  4. 查看完整內容:更多標籤?是: - >步驟1中,無: - >步驟5
  5. 寫入標籤作爲節點元件
  6. 字符串取其餘 - >步驟1

下面是XML的文檔:

<?xml version="1.0" encoding="UTF-8"?> 
<html> 
    <data> 
     <![CDATA[ 
     <h2>header</h2><p>A little article. <b>Here</b> it's already done!</p> 
     ]]> 
    </data> 
</html> 

我想要做什麼:

在我有一個字符串(HTML),只是想輸出字符的特殊金額(例如,前25)。當我這樣做只是在弦上,我得到這樣的結果:

"<h2>header</h2><p>A little article" 

在下一步我把這個字符串的HTML輸出,但在這一點上,我獲得合法的標記,因爲<p> -Tag不關閉。

所以我的第一種方法是:解析這個字符串以獲取每個標記的XML-Nodes,然後遍歷每個節點,編寫一個xml元素(以確保最終標記將有效)並複製儘可能多的字符,直到達到極限,在這個例子中將是25個字符。

+0

您可能希望在您的問題中包含您的XML文檔。 – ColinE 2012-01-03 09:50:48

+0

你對輸入XML有任何控制嗎?如果你沒有使用CDATA標籤,這可能是可能的。使用CDATA標記,HTML字符串僅被視爲文本的通用字符串,並且不容易在HTML標記處進行分析。刪除CDATA標籤,然後您可以開始匹配標籤... – 2012-01-03 10:51:43

+0

請編輯您的問題並提供轉換所需的結果。目前還不清楚你想要「刪除」哪個字符串。 – 2012-01-03 12:56:39

回答

0

如果您有代表HTML的XML節點,那麼這應該是實體編碼,即打開和關閉括號轉換爲&lt;&gt; - 這意味着你可以剪你喜歡的地方,仍然有一個有效的XML文檔。

+0

是的,正確的。對不起,我不太清楚,因爲我想避免一個無效的輸出,一個無效的HTML文檔(因爲缺少關閉元素可能會破壞整個頁面視圖)。 – 2012-01-03 09:55:52

0

正如您所提到分析串你似乎使用XSLT 2.0。這樣,你有兩個選擇,與撒克遜9有擴展功能http://www.saxonica.com/documentation/extensions/functions/parse.xml(並且要解析HTML甚至一個http://www.saxonica.com/documentation/extensions/functions/parse-html.xml的情況下),再有就是大衛·卡萊爾的純XSLT 2.0實現的HTML解析器http://code.google.com/p/web-xslt/source/browse/trunk/htmlparse你可以導入你的樣式表,然後在數據元素的內容上使用。

+0

非常有趣!我會嘗試一下樣式表,謝謝你! (PS:是的,我正在使用XSLT 2.0) – 2012-01-03 12:50:54

+0

我測試了David Carlisle的純XSLT 2.0實現,但我無法使其正常工作。即使大衛卡萊爾的確切例子對我來說也不正確。所以我放棄了我的想法。 :( – 2012-01-10 15:48:08