我想知道是否可以将变量(可能包含凌乱的html)的内容包装到cdata部分。
我正在使用XX和eXist,我似乎无法让它工作。
我试过
<![CDATA[ $data ]]>
<![CDATA[ {$data} ]]>
在这两种情况下,变量都不会被其内容替换,但仍分别为$ data和{$ data}。
我也尝试过使用concat和其他字符串函数,但这些函数导致<![CDATA[
成为<![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 :(得分:0)
@Alejandro是对的。见Priscilla Walmsley的XQuery书第280-281页。 “CDATA部分中的所有文本都是字面上的;不可能在CDATA部分中包含封闭的表达式。”
如果您想通过修复格式错误的位来处理“凌乱的HTML”,您可能希望查看由NekoHTML驱动的util:parse-html()函数。传递凌乱的HTML字符串,您将在另一端获得格式良好的XML节点。
答案 1 :(得分:0)
如果要将一些格式正确但任意的HTML编码为字符串,例如要包含在KML描述中,请使用util:serialise()
例如
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字符编码。