目前我正在进行一些XML转换。输入XML可能不具有某些值,从而导致空元素。因此输出可能如下所示:
<car>
<category>Combi</category>
<name>VW Passat</name>
<age />
</car>
我的问题是,是否存在全局选项或类似的东西,以省略<age />
这样的空元素?
我可以在转换中检查是否存在某个值。或者我可以使用后处理来删除空元素。但我希望有一种更优雅的方式: - )
答案 0 :(得分:4)
我不相信XQuery中有任何序列化选项可以让你省略输出中的nilled元素。
我建议只使用略微修改的标识,删除已填充的元素以对输出进行后处理。以下内容应该有效:
xquery version "1.0";
declare function local:remove-nilled($node as node()) as node()? {
typeswitch($node)
case document-node()
return
document {
for $child in $node/node()
return
local:remove-nilled($child)
}
case element()
return
if($node/node())then
element { node-name($node) } {
$node/attribute(),
for $child in $node/node()
return
local:remove-nilled($child)
}
else()
default
return
$node
};
local:remove-nilled(
document {
<car>
<category>Combi</category>
<name>VW Passat</name>
<age />
</car>
}
)