2011-03-25 49 views
1

我想知道是否可以將變量(可能包含雜亂的html)的內容包裝到cdata節中。eXist XQuery包裝CDATA中的變量

我使用XQuery與eXist,我似乎無法得到它的工作。

我試圖

<![CDATA[ $data ]]> 
<![CDATA[ {$data} ]]> 

在這兩種情況下,變量不是由它的內容所取代,但仍$數據分別{$數據}。

我也嘗試過使用concat和其他字符串函數,但是這些導致<![CDATA[變爲&lt;![CDATA[

$ data包含來自html wysiwyg編輯器的http get/post數據。

xquery version "1.0"; 
declare namespace request="http://exist-db.org/xquery/request"; 

let $data := request:get-parameter("content" , "") 
return <![CDATA[ {$data} ]]> 

現在有人應該怎麼做? 在此先感謝。

+0

文字CDATA部分就是這樣。沒有用於輸出動態CDATA部分的標準指令,也沒有在XSLT 2.0中使用'cdata-section-elements'聲明 – 2011-03-26 00:25:34

回答

0

@Alejandro是對的。參見Priscilla Walmsley的XQuery書第280-281頁。 「CDATA節中的所有文本都是從字面上理解的;不可能在CDATA節中包含封閉表達式。」

如果您想通過修復格式錯誤的比特來處理「雜亂的HTML」,您可能希望查看由NekoHTML驅動的util:parse-html()函數。傳遞凌亂的HTML字符串,並在另一端獲得格式良好的XML節點。

0

如果你要編碼的一些良好的形成,但任意的HTML作爲字符串,例如在KML描述,包括使用UTIL:還原序列化()

如。

xquery version "1.0"; 
declare namespace util="http://exist-db.org/xquery/util"; 

let $data := <div><h1>stuff</h1><a href="url"> <img src="image"/></a></div> 
return 
    util:serialize($data,"method=xml")) 

效果與將XML保存在CDATA中並保留XML字符編碼一樣。

+1

當您使用擴展函數時,您必須鏈接實現... – 2011-03-30 23:02:10