2009-07-28 74 views
0

我在工作中使用eXist作爲項目,並且遇到了一個我似乎無法找出解決方案的問題。在XQuery中保留HTML標記

我有一個正在更新已存在於數據庫中的現有文檔的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> 

現在,這個作品完美如果我只傳遞包裹在一組標籤中的數據(即<p>foo</p>)。如果我做<p>foo</p><p>bar</p>,我得到一個空值放在$text

我一直在頭撞桌子一天半,現在試圖找出爲什麼這不起作用。任何幫助解決這個問題將不勝感激。

回答

0

這似乎是util:parse特別是,而不是你的代碼的其餘部分(我沒有看到任何替代方式來做你想在這裏)的問題。您是否嘗試過在給出的問題示例輸入(即<p>foo</p><p>bar</p>)上特別針對util:parse進行測試,以驗證它確實沒有正確解析多節點片段?

0

猜測:<p>foo</p><p>bar</p>不是良構(沒有根元素),而<p>foo</p>是良構(一個根元素)。

因此請嘗試util:parse-html而不是util:parse