2

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

我正在将 XQuery 与 eXist 一起使用,但我似乎无法让它工作。

我试过了

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

在这两种情况下,变量都不会被它的内容替换,而是分别保持为 $data 和 {$data}。

我也尝试使用 concat 和其他字符串函数,但这些导致<![CDATA[变成&lt;![CDATA[.

$data 包含来自 html 所见即所得编辑器的 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} ]]>

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

4

2 回答 2

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 字符进行了编码。

于 2011-03-30T19:23:25.973 回答
0

@Alejandro 是对的。请参阅 Priscilla Walmsley 的XQuery书籍第 280-281 页。“CDATA 部分中的所有文本都是按字面意思理解的;不可能在 CDATA 部分中包含封闭的表达式。”

如果您想通过修复格式错误的位来处理“混乱的 HTML”,您可能希望查看 NekoHTML 驱动的util:parse-html()函数。传递凌乱的 HTML 字符串,您将在另一端获得格式良好的 XML 节点。

于 2011-03-27T02:17:34.310 回答