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

时间:2010-04-09 22:54:12

标签: xml xquery marklogic

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

  

头条新闻 - 今日• AP来源:   &安培; LT; B和GT;奥巴马&安培; LT; / B&安培; GT;选择   司法职位退出:新闻 - 休息   世界 - & lt; a   HREF =&安培; QUOT; http://shar.es/mqMAG">http://shar.es/mqMAG</a>

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

  

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

如何将转义后的字符取消编码,以便写入<而是tha& lt; ?

我试图做替换,但它总是取代& lt;与& lt; !

  

fn:replace($ s,“& lt;”,“<”)

3 个答案:

答案 0 :(得分:3)

在MarkLogic中,您可以使用以下查询:

let $d := '<a>&lt;c&gt;asdf&lt;/c&gt;</a>' 

return xdmp:unquote ($d)

答案 1 :(得分:3)

在eXist中使用util:parse():

util:parse(concat("<top>","&lt;c&gt;asdf&lt;/c&gt;",</top>")‌​)

答案 2 :(得分:2)

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

<a>&lt;c&gt;asdf&lt;/c&gt;</a>

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

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

<a>{
  saxon:parse(doc('test.xml')/a)
}</a>

结果是:

<a>
  <c>asdf</c>
</a>

我认为大多数(?) XQuery 处理器都有扩展功能可以为您完成此操作。希望有所帮助。