如何使用xQuery取消对转义的XML进行编码

mbr*_*ort 7 xml xquery marklogic

我有一个xQuery类型的变量xs:string,带有编码的HTML片段的值(twitter推文的内容).它看起来像这样:

头条新闻 - 今日• AP来源:< b>奥巴马</b> 选择正义职位撤回:新闻 - 世界其他地方 - < a href =" http://shar.es/mqMAG">http://shar.es/mqMAG</a> ;

当我尝试在HTML块中编写它时,我需要转义字符串,以便浏览器解释HTML片段.相反,字符串按原样写出来,浏览器将其渲染为文本(所以你看到<a href ="blah ....).这就是我写出这个字符串的方式:

{$条目/原子:内容/文本()}

如何将未转义的字符取消编码,以便写入<而不是< ?

我试图做这样的替换,但它总是取代< 与< !

fn:replace($ s,"<","<")

ksc*_*rke 2

取决于您使用的XQuery处理器...最简单的方法是使用具有可以为您处理此问题的扩展的处理器。例如,使用Saxon和以下XML

<a>&lt;c&gt;asdf&lt;/c&gt;</a>
Run Code Online (Sandbox Code Playgroud)

您可以编写一个使用该函数执行您想要的操作的XQuery :saxon:parse()

declare namespace saxon = "http://saxon.sf.net/";

<a>{
  saxon:parse(doc('test.xml')/a)
}</a>
Run Code Online (Sandbox Code Playgroud)

其结果是:

<a>
  <c>asdf</c>
</a>
Run Code Online (Sandbox Code Playgroud)

我认为大多数(?)XQuery处理器都会有一个扩展来为您执行此操作。希望有帮助。