代码之家  ›  专栏  ›  技术社区  ›  mbrevoort

如何用xquery取消对转义xml的编码

  •  7
  • mbrevoort  · 技术社区  · 14 年前

    我在xquery中有一个xs:string类型的变量,其值为编码的html片段(twitter tweet的内容)。看起来是这样的:

    今日头条&8226;美联社消息来源: &lt;b&gt;奥巴马<b&gt;选择 司法所撤销:新闻-休息 世界的一部分 Href=" http://shar.es/mqMAG&quot;&gt;http://shar.es/mqMAG&lt;/a&gt ;

    当我试图在一个html块中写下这一点时,我需要对字符串进行调整,以便浏览器能够解释html片段。相反,字符串将按原样写出,浏览器将其呈现为文本(因此您可以看到<a href=“blah…..”)。下面是我如何写出这个字符串:

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

    我怎样才能取消对转义字符的编码,使其写入<而不是<lt;?

    我尝试过这样的替换,但它总是用<替换<!

    fn:替换($s,“<”,“<”)

    3 回复  |  直到 7 年前
        1
  •  3
  •   Mads Hansen    7 年前

    在marklogic中,可以使用以下查询:

    let $d := '<a>&lt;c&gt;asdf&lt;/c&gt;</a>' 
    
    return xdmp:unquote ($d)
    
        2
  •  3
  •   Iain Ward    7 年前

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

    util:parse(concat("<top>","&lt;c&gt;asdf&lt;/c&gt;",</top>")‌​)
    
        3
  •  2
  •   Sofia grtjn    8 年前

    取决于 函数 正在使用的处理器…最简单的方法是使用一个处理器,它有一个为您处理这个问题的扩展。例如,使用 撒克逊 以及以下 XML :

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

    你可以写一个 函数 使用 saxon:parse() 函数执行所需的操作:

    declare namespace saxon = "http://saxon.sf.net/";
    
    <a>{
      saxon:parse(doc('test.xml')/a)
    }</a>
    

    其结果是:

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

    我想最多的是(?) 函数 处理器将有一个扩展来为您执行此操作。希望能有所帮助。