如何在不使用 xquery 更新的情况下查找所有空字符串并将其替换为 xquery 中的“空”元素。我使用 xquery update 实现了这一点,但我想在不使用 update 的情况下获得。
问问题
249 次
1 回答
4
这种转换在 XSLT 中更容易。在 XSLT 3.0 中,您可以编写:
<xsl:transform version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="*[.='']"><empty/></xsl:template>
</xsl:transform>
这样做的原因是“on-no-match='shallow-copy'”会导致输入树的递归处理,如果特定元素没有明确的模板规则,处理器只会复制元素并向下递归来处理它的孩子。
XQuery 没有内置的原语来执行此操作,但您可以通过显式编写它来实现相同的目的。你需要一个递归函数:
declare function local:process($e as node()) as node() {
if ($e[self::element()])
then
if ($e='')
then <empty/>
else
element {node-name($e)} {
$e/@*,
$e/child::node()/local:process(.)
}
else (:text, comment, PI nodes:)
$e
};
local:process($in/*)
于 2018-03-19T09:17:21.013 回答