【问题标题】:JAXB not parsing default namespace correctlyJAXB 未正确解析默认命名空间
【发布时间】:2015-04-13 06:15:06
【问题描述】:

我正在编写一些代码来解析GPX 文件。这些是由许多不同的来源制作的,从路线规划网站到卫星导航记录。

我在使用 JAXB 时遇到问题。如果使用默认命名空间,它似乎不会加载文件。

例如,当我尝试解析以下文件时,仅加载了根 gpx 元素,而未加载子 meta 并且 java 将该字段留空。

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

  <metadata>
    <time>2015-01-24T18:13:23Z</time>
    <bounds minlat="52.058110" minlon="-2.218540" maxlat="52.347110" maxlon="-1.943840" /> 
  </metadata>
  <!-- snip -->
</gpx>

但是,以下文件可以正常加载。唯一的区别是默认命名空间已更改为已命名的命名空间 (ns1)。

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ns1:gpx xmlns:ns1="http://www.topografix.com/GPX/1/1" version="1.1" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

  <metadata>
    <time>2015-01-24T18:13:23Z</time>
    <bounds minlat="52.058110" minlon="-2.218540" maxlat="52.347110" maxlon="-1.943840" /> 
  </metadata>
  <!-- snip -->
</ns1:gpx>

我的 package-info.java 当前定义为:

/**
 * Pojos Representing the GPX xml.
 */
@XmlSchema(
        elementFormDefault = XmlNsForm.UNQUALIFIED,
        namespace = "http://www.topografix.com/GPX/1/1", 
        location = "http://www.topografix.com/GPX/1/1/gpx.xsd",
        xmlns= { 
                @XmlNs(namespaceURI = "http://www.topografix.com/GPX/1/1", prefix = "gpx"),
            }
        )
package couling.gpxTools.pojo;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

这是其他人以前见过的吗?有什么建议可以解决它吗?

【问题讨论】:

    标签: java jaxb gpx


    【解决方案1】:

    在您的第二个 XML 中,所有元素都应具有 ns1 前缀,以等同于第一个 XML 文档。

    要加载第一个文档,您需要在 @XmlSchema 注释上指定 elementFormDefault=XmlNsForm.QUALIFIED。然后这个包中的所有映射元素将默认具有这个命名空间。由于您指定了UNQUALIFIED,因此只有顶级元素才能获得命名空间资格。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-06
    • 2022-01-20
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多