繁体   English   中英

XQuery:转换期间省略空元素

[英]XQuery: Omitting empty elements during a transformation

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

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

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

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

我不相信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>
    }
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM