我有一个XML文件,我试图使用JaxB加载。
<TABLE NAME="EMPLOYEE">
<ROW>
<EMP_ID>1002</EMP_ID>
<EMP_NAME>Suraj</EMP_NAME>
<EMP_DEPT_ID>3</EMP_DEPT_ID>
<EMP_DES>SE</EMP_DES>
</ROW>
<ROW>
<EMP_ID>1034</EMP_ID>
<EMP_NAME>Birendra</EMP_NAME>
<EMP_DEPT_ID>6</EMP_DEPT_ID>
<EMP_DES>SSE</EMP_DES>
</ROW>
</TABLE>
Alos创建POJO与跟随
相同@XmlRootElement
public class EmpTable {
private String NAME;
private EmpRow ROW;
public String getNAME() {
return NAME;
}
@XmlAttribute
public void setNAME(String nAME) {
NAME = nAME;
}
public EmpRow getROW() {
return ROW;
}
@XmlElement
public void setROW(EmpRow rOW) {
ROW = rOW;
}
}
也适用于EmpRow。 使用以下代码
读取XmlFile file = new File("C:/Users/navnath.kumbhar/Desktop/ImportDataXml.xml");
EmpTable objEmpTable = JAXB.unmarshal(file, EmpTable.class);
现在问题是我能够正确读取完整对象及其数据,除了TABLE标签的NAME属性。有人可以建议我有什么错误的侮辱或其他任何需要吗?
答案 0 :(得分:0)
映射到XML属性
您应该按如下方式注释NAME
属性:
@XmlAttribute(name="NAME")
public void setNAME(String nAME) {
NAME = nAME;
}
虽然我建议使用以下命名约定:
@XmlAttribute(name="NAME")
public void setName(String nAME) {
NAME = nAME;
}
映射根元素
此外,您似乎应该使用@XmlRootElement
,如下所示。
@XmlRootElement(name="TABLE")
public class EmpTable {
虽然你可能会因为Table
课程而感觉更好:
@XmlRootElement(name="TABLE")
public class Table {
JAXB RUNTIME
以下是一行代码,但效率不高,
EmpTable objEmpTable = JAXB.unmarshal(file, EmpTable.class);
相反,你应该创建一个JAXBContext
,它是一个线程安全的初始化版本的映射元数据,可以从中创建编组人员和解组者。
JAXBContext jc = JAXBContext.newInstance(EmpTable.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
EmpTable objEmpTable = (EmpTable) unmarshaller.unmarshal(file);