2013-01-02 50 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