我无法解组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 - &gt;数据)。
@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;
}
}
II。第二级,链接到第三级(数据 - &gt; 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;
}
}
III。第三级链接到第四级( UserData-&gt; 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;
}
}
答案 0 :(得分: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)
表示除非明确注释,否则不会映射任何内容。这可能或不是你想要的。您可能会发现以下文章很有用: