2

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>

元の名前空間は削除されているように見えますが、新しい名前空間はまだアタッチされていません。それとも、影響を受けていない名前空間宣言もなくなっているため、プロセッサが名前空間を出力しないだけですか。

4

2 に答える 2

1

残念ながら、eXist Sandbox の結果ウィンドウには名前空間属性 (@xmlns) が表示されません。しかし、クエリを .xq ファイルとして保存し、ブラウザで実行すると、名前空間情報が実際に適切に保持されていることがわかります。ちなみに、eXide と呼ばれるサンドボックスの次世代バージョンでは、ネームスペース情報の表示がいくらか改善されています。https://exist-db.org/exist/apps/eXideで eXide のデモを参照してください。

于 2011-08-11T11:47:07.793 に答える
0

OSB11でSaxon9.3実装を使用して同様の問題が発生しました。奇妙なことに、Oxygenで動作しますが、OSBでは動作しません。

于 2012-11-30T11:38:30.617 に答える