How to unencode escaped XML with xQuery

孤街醉人 提交于 2019-12-01 15:31:32

问题


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 &lt; ?

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

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


回答1:


In MarkLogic you can use the below query:

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

return xdmp:unquote ($d)



回答2:


in eXist, use util:parse():

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



回答3:


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>&lt;c&gt;asdf&lt;/c&gt;</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.



来源:https://stackoverflow.com/questions/2611480/how-to-unencode-escaped-xml-with-xquery

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!