XQuery排除结果前缀

时间:2011-12-22 02:25:08

标签: xml xquery

如何从类似于XSL中的XSLT exclude-result-prefixes属性的XQuery中排除结果前缀。

目前,我的XQuery为名称空间生成名称空间前缀,这些名称空间不属于结果集,但却是原始有效负载的一部分。

1 个答案:

答案 0 :(得分:2)

XQuery实际上没有内置功能,例如XSLT中的exclude-result-prefixes。序列化扩展似乎也没有帮助。因此,您必须在返回之前处理最终结果,自己完成。不过应该不难。

xqueryfunctions网站有一些可以提供帮助的功能,例如functx:change-element-names-deephttp://www.xqueryfunctions.com/xq/functx_change-element-names-deep.html),但这并不适合这里的法案。所以,这是我自己的一个更具体的解决方案:

declare function local:remove-prefixes($node as node(), $prefixes as xs:string*) {
    typeswitch ($node)
    case element()
        return
            if ($prefixes = ('#all', prefix-from-QName(node-name($node)))) then
                element {QName(namespace-uri($node), local-name($node))} {
                    $node/@*,
                    $node/node()/local:remove-prefixes(., $prefixes)
                }
            else
                element {node-name($node)} {
                    $node/@*,
                    $node/node()/local:remove-prefixes(., $prefixes)
                }
    case document-node()
        return
            document {
                $node/node()/local:remove-prefixes(., $prefixes)
            }
    default
        return $node
};

HTH!