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>

现在,如果我只传入包装在一组标签(即<p>foo</p>)中的数据,这将非常有效。如果我这样做<p>foo</p><p>bar</p>,我会在$text.

我已经把头撞在桌子上一天半了,现在试图弄清楚为什么这不起作用。任何解决此问题的帮助将不胜感激。

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>格式正确(一个根元素)。

所以尝试util:parse-html代替util:parse.

于 2009-08-01T08:06:55.380 回答