【问题标题】:xquery with namespaces带有命名空间的 xquery
【发布时间】:2013-01-02 17:14:35
【问题描述】:

我编写了一个 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 文件中拥有各自的默认命名空间。我必须如何进行?非常感谢。

【问题讨论】:

    标签: namespaces xquery


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        让 $new_doc := {$source_node/text()}

        然后孩子插入它或你想用它做什么。 或者你可以使用 XSLT...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-25
          • 2014-03-21
          • 2021-03-26
          • 2023-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多