带有名称空间的xquery

时间:2013-01-02 17:14:36

标签: namespaces xquery

我编写了一个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文件中有相应的默认命名空间。我该怎么办?非常感谢。

3 个答案:

答案 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 ......