【问题标题】:Jaxb Unmarshalling java files from XML file with namespaceJaxb 从具有命名空间的 XML 文件中解组 java 文件
【发布时间】:2021-05-12 23:12:39
【问题描述】:

这是我的 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>

将此添加到 package-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 文件中读取长度信息。

【问题讨论】:

    标签: java xml jaxb marshalling unmarshalling


    【解决方案1】:

    在您的 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 类的length 属性的命名空间URI。 您可以通过注释 length 属性来做到这一点 使用@XmlElement 指定其中的命名空间。 (另见API documentation of XmlElement.namespace。)

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

    【讨论】:

    • 谢谢@Thomas Fritsch,它成功了。你是救世主,我花了一整天的时间尝试不同的方法来解决这个问题。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多