O'Reiilyの本XQueryで次のXQueryユーザー定義関数を見つけました。これは、印刷時にXMLファイルの名前空間を変更するために使用されます。
declare namespace functx = "http://www.functx.com";
declare function functx:change-element-ns-deep
($element as element(), $newns as xs:string) as element()
{
let $newName := QName ($newns, name ($element))
return (element {$newName}
{$element/@*,
for $child in $element/node()
return if ($child instance of element())
then functx:change-element-ns-deep ($child, $newns)
else $child
}
)
};
この関数を呼び出す1つの例は次のとおりです。
<text xmlns:pre="pre">
{
functx:change-element-ns-deep(<pre:x><pre:y>123</pre:y></pre:x>, "http://new")
}
</text>
戻り値:
<test xmlns:pre="pre" >
< x xmlns="http//new">
<y>123</y>
</x>
</test>
しかし、私が持っているのは:
<test>
<x>
<y>123</y>
</x>
</test>
元の名前空間は削除されているように見えますが、新しい名前空間はまだアタッチされていません。それとも、影響を受けていない名前空間宣言もなくなっているため、プロセッサが名前空間を出力しないだけですか。