无法使用JaxB读取读取xml属性

时间:2013-03-08 09:11:41

标签: xml jaxb java-6

我有一个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。 使用以下代码

读取Xml
File file = new File("C:/Users/navnath.kumbhar/Desktop/ImportDataXml.xml");
EmpTable objEmpTable = JAXB.unmarshal(file, EmpTable.class);

现在问题是我能够正确读取完整对象及其数据,除了TABLE标签的NAME属性。有人可以建议我有什么错误的侮辱或其他任何需要吗?

1 个答案:

答案 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);