1

我有一个试图使用 JaxB 加载的 XML 文件。

<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 属性除外。任何人都可以建议我有什么错误的暗示或需要其他什么吗?

4

1 回答 1

1

映射到 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 运行时

下面是一行代码,但是效率不是很高,

EmpTable objEmpTable = JAXB.unmarshal(file, EmpTable.class);

相反,您应该创建一个JAXBContext映射元数据的线程安全初始化版本,可以从中创建编组器和解组器。

JAXBContext jc = JAXBContext.newInstance(EmpTable.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
EmpTable objEmpTable = (EmpTable) unmarshaller.unmarshal(file);
于 2013-03-08T11:50:33.727 回答