1

私はxQueryの初心者であり、ルートノードのすべてのサブクラスをXMLファイルにリストしようとしています。ただし、XMLドキュメントのルートノードには名前空間が定義されているため、参照時にxQueryが機能しません。

for $ x in doc( "/ db / books.xml")/ bookstore / book return $ xは、bookstoreタグで定義された名前空間を持つものを返しません。

タグから名前空間を削除すると、クエリは完全に機能します。

XMLファイルの名前空間を削除せずにこれを回避する方法はありますか?

編集:名前空間が大幅に異なる数百のXMLファイルに対して最終的にこれらのクエリを実行します

前もって感謝します

4

2 に答える 2

0

クエリで名前空間を宣言しましたか?お気に入り :

declare namespace ns = "http://example.org";

次に、クエリでそれを使用します。

for $x in doc("/db/books.xml")/ns:bookstore/ns:book return $x
于 2012-12-03T11:39:14.637 に答える
0

あなたがさらに怠惰である場合(そして<a:foo />vsのような名前の衝突を確実に避けることができる場合<b:foo />)、あなたは使用したいかもしれません:

for $x in doc("/db/books.xml")/*:bookstore/*:book return $x ここで、* は任意の名前空間に一致します(「名前空間なし」でも)

于 2012-12-03T16:16:25.140 に答える