如何从类似于XSL中的XSLT exclude-result-prefixes属性的XQuery中排除结果前缀。
目前,我的XQuery为名称空间生成名称空间前缀,这些名称空间不属于结果集,但却是原始有效负载的一部分。
答案 0 :(得分:2)
XQuery实际上没有内置功能,例如XSLT中的exclude-result-prefixes。序列化扩展似乎也没有帮助。因此,您必须在返回之前处理最终结果,自己完成。不过应该不难。
xqueryfunctions网站有一些可以提供帮助的功能,例如functx:change-element-names-deep
(http://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!