9

xQueryにxs:string型の変数があり、エンコードされたHTMLスニペット(Twitterのツイートのコンテンツ)の値が含まれています。次のようになります。

ヘッドライン-今日&#8226; 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 ....が表示されます)。この文字列の書き方は次のとおりです。

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

エスケープ文字をエンコードせずに、<ではなく&lt;と書き込むにはどうすればよいですか。?

私はこのような置換を試みましたが、常に&lt;を置換します。&lt; !

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

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 に答える