1

我编写了一个 xquery 程序来将一个 xml 文件转换为另一个。一切顺利。但是,如果我在 xquery 中插入命名空间(直接作为根元素中的属性或声明默认元素命名空间“”;),则不会考虑我的 FLWOR 语句。然后我收到一个空的结果集。问题出在哪里?我该怎么做才能成为结果?感谢您的回答。


非常感谢您的回答。但这并不能真正解决我的问题。我试图把问题表述得更清楚。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 文件中拥有各自的默认命名空间。我必须如何进行?非常感谢。

4

3 回答 3

2

您可以通过使用与命名空间无关的 *: 元素测试来忽略输入文档中的默认命名空间,例如:

/*: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>
于 2013-01-03T20:46:52.540 回答
0

我认为您不应该将命名空间作为属性插入。我不认为 xmlns 真的是一个属性,不应该这样对待。尝试拉入您想要翻译的任何值并在新命名空间中创建一个新元素。

声明命名空间 ns1 = "ns1"; 声明命名空间 ns2 = "ns2";

让 $source_node := $doc/ns1:whatever/ns1:node/ns1:your/ns1:translating

让 $new_doc := <ns2:SOME_ELEMENT>{$source_node/text()}</ns2:SOME_ELEMENT>

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

于 2013-01-03T14:27:28.113 回答
0

检查您返回的元素是否与您在根元素中设置的名称空间相同。

于 2013-01-03T13:37:20.863 回答