9

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

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

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

{$entry/atom:content/text()}

我怎样才能让转义字符未编码,所以它写 < 而不是 < ?

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

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

4

4 回答 4

3

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

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

return xdmp:unquote ($d)
于 2010-04-16T16:33:03.383 回答
3

在 eXist 中,使用 util:parse():

util:parse(concat("<top>","&lt;c&gt;asdf&lt;/c&gt;",</top>")‌​)
于 2010-04-21T14:26:24.013 回答
2

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

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

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

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

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

结果是:

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

我认为大多数(?)XQuery处理器都会有一个扩展来为你做这件事。希望有帮助。

于 2010-04-14T02:31:12.830 回答
0

从 XQuery 3 开始,您可以使用parse-xml()orparse-xml-fragment()函数。也可以看看:

于 2022-01-25T07:23:12.247 回答