2

我无法解组 xml,因为不明白如何在另一个对象中注释对象类。请帮忙。

XML:

<?xml version="1.0" encoding="UTF-8"?>
<ODZ xmlns="http://www.company.com/1.0" >
    <Data DataID="ZZZ">
        <UserData UserKey="user_001">
                 <UserEvent>...</UserEvent>
            </UserData> 
     </Data>
</ODZ>

容器类:I. 第一级与第二级(ODZ -> Data)的链接。

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "ODZ", namespace = "http://www.company.com/1.0")
public class ODZContainer {

    private ImportContainer importContainer;

    @XmlElement (name = "Data", type=ImportContainer.class)
    public ImportContainer getImportContainer() {
        return importContainer;
    }
}

二、第二级,链接到第三级(Data -> UserData)。

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "Data")
public class ImportContainer {

    private String DataID;
    private ArrayList<UserDataBean> userDataBean;

    @XmlElement (name = "UserData", type=UserDataBean.class)
    public ArrayList<UserDataBean> getUserDataBean() {
        return userDataBean;
    }

    @XmlAttribute(name = "DataID")
    public String getDataID() {
        return DataID;
    }
}

三、第三级链接到第四级(UserData-> UserEvent)。

@XmlAccessorType(XmlAccessType.NONE)
    @XmlRootElement(name = "UserData")
    public class UserDataBean {
        private ArrayList<UserEventBean> userEventData;
        private String userEventID;

        @XmlAttribute(name = "UserKey")
        public String getUserEventID() {
            return userEventID;
        }

        @XmlElement (name = "UserEvent", type=UserEventBean.class)
        public ArrayList<UserEventBean> getUserEventBean() {
            return userEventData;
        }
    }
4

1 回答 1

1

您的 JAXB 元数据中的名称空间限定与您的 XML 不匹配。您可以使用包级别@XmlSchema注释来指定模型的命名空间限定。

@XmlSchema(
    namespace = "http://www.company.com/1.0",
    elementFormDefault = XmlNsForm.QUALIFIED)
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

有关 JAXB 和命名空间的更多信息


关于您的元数据的注释

由于ArrayList已经指定了 的类型,因此您无需通过@XmlElement注释指定它。不痛,但没必要。

@XmlElement (name = "UserData", type=UserDataBean.class)
public ArrayList<UserDataBean> getUserDataBean() {
    return userDataBean;
}

@XmlAccessorType(XmlAccessType.NONE)意味着除非明确注释,否则不会映射任何内容。这可能是也可能不是你想要的。您可能会发现以下文章很有用:

于 2013-07-15T20:34:01.493 回答