Jaxb 从具有命名空间的 XML 文件解组 java 文件

Jaxb Unmarshalling java files from XML file with namespace

这是我的XML

<?xml version="1.0"?>
<gpx version="1.1" creator="Example" xmlns="http://www.Example.com/1" xmlns:football="https://www.Example-football.com/xsd/football-ext">
    <metadata>
        <name>hello world</name>
        <time>2018-04-26T12:32:52</time>
        <extensions>
            <sportsMeta>
                <football:length>5080.3714454417996</football:length>
            </sportsMeta>
        </extensions>
    </metadata>
</gpx>

将此添加到包中-info.java

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.Example.com/1", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, attributeFormDefault = XmlNsForm.UNQUALIFIED, xmlns = {
        @javax.xml.bind.annotation.XmlNs(prefix = "football", namespaceURI = "https://www.Example-football.com/xsd/football-ext"),
        @javax.xml.bind.annotation.XmlNs(prefix = "", namespaceURI = "https://www.Example-football.com/xsd/football-ext/1/1") })
package com.example.football.share.gpx;

import javax.xml.bind.annotation.XmlNsForm;

我能读懂名字、时间。但无法读取 guid、长度。

这里是SportsMeta.java

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "sportsMeta", propOrder = {
        "length"
})
public class SportsMeta {

    protected BigDecimal length;

    public BigDecimal getLength() {
        return length;
    }

    public void setLength(BigDecimal length) {
        this.length = length;
    }
}

如何从 XML 文件中读取长度信息。

在您的 XML 输入中,您有以下部分:

<sportsMeta>
    <football:length>5080.3714454417996</football:length>
</sportsMeta>

其中命名空间前缀 football 指的是命名空间 URI
"https://www.Example-football.com/xsd/football-ext"xmlns:football="https://www.Example-football.com/xsd/football-ext" 定义 在你的 XML.

要将此 XML 正确映射到 Java,您需要指定 您的 SportsMeta class 的 length 属性 的命名空间 URI。 您可以通过注释 length 属性 来做到这一点 使用 @XmlElement 指定其中的命名空间。 (另见 API documentation of XmlElement.namespace。)

@XmlElement(namespace = "https://www.Example-football.com/xsd/football-ext")
protected BigDecimal length;