2012-12-03 100 views
1

我是xQuery的初學者,我試圖列出XML文件中根節點的所有子類。但是,XML文檔中的根節點在其中定義了名稱空間,這意味着我的xQuery在引用時不起作用。Xquery不能使用名稱空間

爲$ X在文檔(「/ DB/books.xml」文件)/書店/本書 回報$ X 不與書店標籤

定義的命名空間返回任何東西當我刪除的命名空間標籤,查詢完美地工作。

有沒有什麼辦法可以解決這個問題,而無需移除XML文件中的命名空間?

編輯:我會最終被數以百計的XML文件,其中的命名空間有很大的不同

預先感謝您執行這些查詢

回答

0

你宣佈你的命名空間在您的查詢? 像:

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

然後使用它在您的查詢:

for $x in doc("/db/books.xml")/ns:bookstore/ns:book return $x 
+0

我可以做到這一點,它可以在這個特定的實例中工作,但是當我最終在許多其他XML文件上運行查詢時,它們不起作用,因爲其中一些XML文件具有xml:base和ontologyIRI聲明在名稱空間旁邊。 xml:base和OntologyIRI是特定於每個文件的。 – user1872335

+0

我試過了,即使我只聲明一個名稱空間,它也能正常工作。感謝您的幫助! – user1872335

0

如果你甚至懶惰(並且可以肯定,以避免名稱衝突像<a:foo /> VS <b:foo />),你甚至可能要使用:

for $x in doc("/db/books.xml")/*:bookstore/*:book return $x 其中*將匹配任何給定的命名空間(即使是 「沒有命名空間」)

相關問題