在XQuery中保留HTML标记
问题描述:
我在工作中使用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
。
我一直在头撞桌子一天半,现在试图找出为什么这不起作用。任何帮助解决这个问题将不胜感激。
答
这似乎是util:parse
特别是,而不是你的代码的其余部分(我没有看到任何替代方式来做你想在这里)的问题。您是否尝试过在给出的问题示例输入(即<p>foo</p><p>bar</p>
)上特别针对util:parse
进行测试,以验证它确实没有正确解析多节点片段?
答
猜测:<p>foo</p><p>bar</p>
不是良构(没有根元素),而<p>foo</p>
是良构(一个根元素)。
因此请尝试util:parse-html
而不是util:parse
。