我有一个带有命名空间的XML:
<namespace:root>
<namespace:node>
<namespace:subnode>value</namespace:subnode>
</namespace:node>
</namespace:root>
我需要执行XQuery以获取相同的XML或子节点作为输出,而没有名称空间:
<root>
<node>
<subnode>value</subnode>
</node>
</root>
是否有XQuery语法?
答案 0 :(得分:3)
您可以使用递归函数从元素和属性名称中删除所有前缀:
declare function local:strip-namespaces($node as node()) as node()* {
if($node instance of element()) then (
element { local-name($node) } {
for $attribute in $node/@*
return attribute { local-name($attribute) } { $attribute },
for $child in $node/node()
return local:strip-namespaces($child)
}
) else (
$node
)
};
let $xml :=
<namespace:root xmlns:namespace='URI' namespace:id='123'>
<namespace:node>
<namespace:subnode>value</namespace:subnode>
</namespace:node>
</namespace:root>
return local:strip-namespaces($xml)