我编写了一个xquery程序,用于从一个xml文件转换到另一个xml文件。一切顺利。但是,如果我在xquery中为结果插入一个名称空间(直接作为根元素中的属性或使用declare default element namespace“”;),则不考虑我的FLWOR-statment。然后我收到一个空的结果集。问题出在哪儿?我应该怎么做才能成为结果?谢谢你的回答。
非常感谢你的回答。但这解决了我的问题。我试着让问题更清楚。 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文件中有相应的默认命名空间。我该怎么办?非常感谢。
答案 0 :(得分: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>
答案 1 :(得分:0)
检查要返回的元素是否与在根元素中设置的命名空间相同。
答案 2 :(得分:0)
我认为您不应该将命名空间作为属性插入。我不认为xmlns确实是一个属性,不应该这样对待。尝试引入您想要翻译的任何值,并在新命名空间中创建一个新元素。
声明命名空间ns1 =“ns1”; declare namespace ns2 =“ns2”;
let $ source_node:= $ doc / ns1:whatever / ns1:node / ns1:your / ns1:translating
let $ new_doc:=&lt; ns2:SOME_ELEMENT&gt; {$ source_node / text()}&lt; / ns2:SOME_ELEMENT&gt;
然后孩子插入它或任何你想做的事情。 或者你可以使用XSLT ......