簡體   English   中英

XSLT:將字符串解析為XML節點集(具體:將HTML-String轉換為節點集)?

[英]XSLT: Parse string as XML Node Set (concret: transform HTML-String to a node-set)?

我正面臨一個問題,我在XML中有一個節點,該節點帶有一個表示HTML的字符串。 我需要剪切此字符串,但是,這當然會導致HTML-Markup無效(例如,如果我總是在30個字符之后剪切字符串,則很容易丟失諸如</ul>等結束符)。 該怎么辦? 這似乎非常困難,因為我沒有通過Google找到真正的幫助。

到目前為止,我的想法是:使用“ analyze-string”和regex選擇節點和內容,並將其編寫為XML-element-nodes。 但是我遇到了處理所有情況的大問題,尤其是嵌套節點。

有人有想法嗎?

僅供參考:我的記事本:

  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節點,然后遍歷每個節點,編寫一個xml元素(以確保最終標簽有效)並復制盡可能多的字符,直到達到限制為止,在此示例中,將為25個字符。

如果您有一個表示HTML的XML節點,則該節點應已進行實體編碼,即將打開和關閉大括號轉換為&lt; &gt; -這意味着您可以在任何需要的地方剪切它,並且仍然擁有有效的XML文檔。

正如您提到的分析字符串,您似乎在使用XSLT 2.0。 這樣,您有兩種選擇,使用Saxon 9可以使用擴展功能http://www.saxonica.com/documentation/extensions/functions/parse.xml (甚至還有一個http://www.saxonica.com/documentation/如果您想解析HTML,則可以使用extensions / functions / parse-html.xml ),然后還有David Carlisle的HTML解析器的純XSLT 2.0實現http://code.google.com/p/web-xslt/source/瀏覽/ trunk / htmlparse您可以將其導入樣式表,然后在數據元素的內容上使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM