1

ある xml ファイルから別の xml ファイルに変換する xquery プログラムを作成しました。すべてがうまくいきます。しかし、名前空間を (ルート要素の属性として直接、またはデフォルトの要素名前空間 ""; を宣言して) 結果の xquery に挿入すると、FLWOR ステートメントは考慮されません。次に、空の結果セットを受け取ります。問題はどこだ?結果になるにはどうしたらいいですか?答えてくれてありがとう。


回答ありがとうございます。しかし、これは本当に私の問題を解決しません。私は問題をより明確に定式化しようとします。xquery プログラムは、gpx ファイルを kml ファイルに変換する必要があります。したがって、私は 2 つのデフォルトの名前空間に関心があります。通常ソース ドキュメントにあるデフォルトの名前空間 xmlns="http://www.topografix.com/GPX/1/1" と、デフォルトの名前空間 xmlns="http://www.opengis.net/kml/2.2"それは結果の kml ドキュメントにあるはずです。これを xquery で定式化する方法を知っている人はいますか? gpx および kml ドキュメントにデフォルトの名前空間がなくても、プログラムは正常に動作しますが、すべての gpx ファイルにはデフォルトの名前空間が設定されており、kml ファイルにもそれぞれのデフォルトの名前空間を設定したいと考えています。どうすればよいですか?どうもありがとう。

4

3 に答える 3

2

次のような namespace agnostic *: 要素テストを使用して、入力ドキュメントのデフォルトの名前空間を無視できます。

/*:gpx/*:trk

また、名前空間の比較では、名前空間のプレフィックス (またはそれがないこと) は重要ではなく、URL のみが重要です。したがって、 ` と一致させることができます

declare namespace tempfoobar = "http://www.topografix.com/GPX/1/1";
/tempfoobar:gpx

出力のデフォルトの名前空間を再定義することもできます。お気に入り

declare default element namespace "http://www.topografix.com/GPX/1/1";
let $a := /gpx 
return
  <kml xmlns="http://www.opengis.net/kml/2.2">{$a}</kml>
于 2013-01-03T20:46:52.540 に答える
0

返される要素が、ルート要素で設定しているのと同じ名前空間を持っているかどうかを確認してください。

于 2013-01-03T13:37:20.863 に答える
0

名前空間を属性として挿入する必要はないと思います。xmlns は実際には属性ではなく、そのように扱うべきではないと思います。翻訳したい値を取り込み、新しい名前空間内に新しい要素を作成してみてください。

名前空間 ns1 = "ns1" を宣言します。名前空間 ns2 = "ns2" を宣言します。

let $source_node := $doc/ns1:whatever/ns1:node/ns1:your/ns1:translating

let $new_doc := <ns2:SOME_ELEMENT>{$source_node/text()}</ns2:SOME_ELEMENT>

次に、子供がそれを挿入するか、それでやりたいことを何でもします。または、XSLT を使用できます...

于 2013-01-03T14:27:28.113 に答える