XQuery:在转换过程中省略空元素

时间:2015-08-24 17:58:22

标签: xml xquery

目前我正在进行一些XML转换。输入XML可能不具有某些值,从而导致空元素。因此输出可能如下所示:

<car>
  <category>Combi</category>
  <name>VW Passat</name>
  <age />
</car>

我的问题是,是否存在全局选项或类似的东西,以省略<age />这样的空元素?

我可以在转换中检查是否存在某个值。或者我可以使用后处理来删除空元素。但我希望有一种更优雅的方式: - )

1 个答案:

答案 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>
    }
)