但它只适用于没有命名空间文档,或明确声明名称空间使用文档中使用的相同前缀来处理。
如果您没有声明名称空间(使用相同的前缀),则会收到错误:
无法编译xquery:错误:XPST0081没有为前缀定义名称空间 xsd [第15行,第12栏]
有没有办法在XQuery中编写一个Identity Transform,可以自动处理命名空间和前缀,避免显式声明命名空间?
编辑:
这是Wikibook的代码:
(: return a deep copy of the element and all sub elements :)
declare function local:copy($element as element()) as element() {
element {node-name($element)}
{$element/@*,
for $child in $element/node()
return
if ($child instance of element())
then local:copy($child)
else $child
}
};
就我而言,我不知道要处理的文档中的名称空间或前缀,因此如果未在XQuery中声明名称空间和前缀,element { } { }
构造将失败。
要重现它,只需复制/粘贴并使用带有前缀命名空间的文档运行它。
答案 0 :(得分:0)
我认为答案是肯定的。如果要处理命名空间元素,则需要声明这些命名空间。
答案 1 :(得分:0)
根据错误消息,您需要做的就是在XQuery文档的顶部声明xsd命名空间。
Declare namespace xsd="http://www.w3.org/2001/XMLSchema";
如果没有这样做,那么发布你的XQuery将极大地帮助我们理解问题所在。