CDATA中的eXist XQuery包装变量

时间:2011-03-25 23:25:24

标签: xquery exist-db

我想知道是否可以将变量(可能包含凌乱的html)的内容包装到cdata部分。

我正在使用XX和eXist,我似乎无法让它工作。

我试过

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

在这两种情况下,变量都不会被其内容替换,但仍分别为$ data和{$ 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} ]]>

现在有人应该怎么做? 提前谢谢。

2 个答案:

答案 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字符编码。