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

发布于 2024-08-28 00:04:05 字数 678 浏览 10 评论 0原文

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

今日头条 •美联社来源: <b>奥巴马</b>挑选 司法职位撤回:新闻 - 休息 世界 - <a href="http://shar.es/mqMAG</a>" rel="noreferrer"> http://shar.es/mqMAG">http://shar.es/mqMAG</a>

当我尝试将其写入 HTML 块时,我需要对字符串进行转义,以便浏览器能够解释 HTML 代码段。相反,字符串按原样写出,浏览器将其渲染为文本(因此您会看到

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

我怎样才能对转义字符进行未编码,以便它写成 <而不是< ?

我尝试过像这样进行替换,但它总是替换 &lt;与< !

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

I have a variable in xQuery of type xs:string with the value of an encoded HTML snippet (the content of a twitter tweet). It looks like this:

Headlines-Today • AP sources:
<b>Obama</b> pick for
Justice post withdraws : News - Rest
Of World - <a
href="http://shar.es/mqMAG">http://shar.es/mqMAG</a>;

When I try to write this out in an HTML block, I need the string to be unescaped so that the HTML snippet will be interpreted by the browser. Instead the string is getting written out as is and the browser is rendering it as just text (so you see <a href="blah.... ). Here's how I'm writing out this string:

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

How can I have the escaped characters unencoded so it writes < rather tha < ?

I've tried to do a replacelike this but it always replaces the < with < !

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

沫尐诺 2024-09-04 00:04:05

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

let $d := '<a><c>asdf</c></a>' 

return xdmp:unquote ($d)

In MarkLogic you can use the below query:

let $d := '<a><c>asdf</c></a>' 

return xdmp:unquote ($d)
狠疯拽 2024-09-04 00:04:05

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

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

in eXist, use util:parse():

util:parse(concat("<top>","<c>asdf</c>",</top>")‌​)
平定天下 2024-09-04 00:04:05

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

<a><c>asdf</c></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 处理器都会有一个扩展来为您执行此操作。希望有帮助。

Depends on which XQuery processor you are using... The easiest way is to be using a processor that has an extension that handles this for you. For instance, with Saxon and the following XML:

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

You can write an XQuery that uses the saxon:parse() function to do what you want:

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

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

The result from that is:

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

I think most(?) XQuery processors will have an extension to do this for you. Hope that helps.

听不够的曲调 2024-09-04 00:04:05

从 XQuery 3 开始,您可以使用 parse-xml()parse-xml-fragment() 函数。另请参阅:

since XQuery 3 you can use the parse-xml() or parse-xml-fragment() functions. See also:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文