2013-01-02 84 views
1

我寫過一個xquery程序來從一個xml文件轉換到另一個xml文件。一切順利。但是如果我在xquery中插入一個名稱空間(直接作爲根元素中的屬性或聲明默認元素名稱空間「」;),結果我的FLWOR-statment不被考慮。然後我收到一個空的結果集。哪裏有問題?我該怎麼做才能成爲成果?謝謝你的回答。帶命名空間的xquery


非常感謝您的回答。但這並不能解決我的問題。我試圖闡明問題更清楚。 xquery程序應該將gpx文件轉換爲kml文件。所以我關心兩個默認的命名空間。默認名稱空間xmlns =「http://www.topografix.com/GPX/1/1」,通常位於源文檔中,默認命名空間xmlns =「http://www.opengis.net/kml/2.2」那應該在結果kml文件中。有沒有人有一個想法如何在XQuery中制定這個?如果沒有gpx和kml文檔中的默認命名空間,程序可以正常工作,但我所有的gpx文件都有默認的命名空間集,我也希望在kml文件中有相應的默認命名空間。我該如何繼續?非常感謝。

+2

你的代碼在哪裏? –

回答

0

檢查您要返回的元素是否具有與在根元素中設置的名稱空間相同的名稱空間。

0

我不認爲你應該插入名稱空間作爲屬性。我不認爲xmlns是一個真正的屬性,不應該這樣對待。嘗試提取您想要翻譯的任何值,並在您的新名稱空間中創建一個新元素。

declare namespace ns1 =「ns1」; declare namespace ns2 =「ns2」;

設$ source_node:= $​​ DOC/NS1:無論/ NS1:節點/ NS1:你的/ NS1:翻譯

設$ new_doc:= < NS2:SOME_ELEMENT > {$ source_node /文()} </ns2:SOME_ELEMENT >

然後孩子插入它或任何你想要做的事情。 或者你可以使用XSLT ...

1

可以忽略輸入文件中的默認命名空間,通過使用命名空間無關*:元素測試,如:

/*: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> 
+0

感謝! – vikingsteve