0

仕事でプロジェクトに eXist を使用していますが、解決策が見つからないように見える問題に遭遇しました。

データベースに既に存在する既存のドキュメントを更新する xquery スクリプトがあります。更新が必要なデータの一部には、HTML、特にタグが含まれ<p>ています。</p>eXist/XQuery に HTML のエスケープを停止させることができません。元の形で保存する必要があります。これが私がやっていることの非常に単純なバージョンです:

<pre>
declare variable $raw-content := request:get-parameter('content', '')
declare variable $content := local:clean($raw-content)
</pre>

local:clean次の機能です。

<pre>
declare function local:clean($text) {
     let $text := util:parse($text)
     return $text
};
</pre>

コードの後半で、特定の XML 要素を更新します。

<pre>
{update replace $n/sports-content/article/nitf/body/body.content with <body.content>{$content}</body.content>}
</pre>

これで、1 セットのタグ (つまり ) でラップされたデータのみを渡すとこれは完璧に機能します<p>foo</p>。すると<p>foo</p><p>bar</p>、 にヌル値が配置され$textます。

なぜこれが機能しないのかを理解しようとして、1日半頭を机にぶつけていました。この問題を解決するための助けをいただければ幸いです。

4

2 に答える 2

0

特に、コードの残りの部分では問題が発生しているようutil:parseです(そして、ここで必要なことを実行するための代替方法はありません)。util:parse質問で指定したサンプル入力(つまり)を具体的にテストし<p>foo</p><p>bar</p>て、マルチノードフラグメントが実際に正しく解析されないことを確認しましたか?

于 2009-07-31T18:51:41.377 に答える
0

推測:<p>foo</p><p>bar</p>整形式ではありません (ルート要素なし)<p>foo</p>が、整形式 (ルート要素が 1 つ) です。

util:parse-htmlの代わりに試してみてくださいutil:parse

于 2009-08-01T08:06:55.380 に答える