2013-03-08 63 views
1

我有一個XML文件,我嘗試使用JaxB加載。使用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> 

阿洛斯創建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); 

現在的問題是,我能夠讀取完整的對象,它正確的數據,除了表標籤的name屬性。任何暗示我有什麼錯誤的暗示或其他什麼是必需的嗎?

回答

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運行

下面是一行代碼,但不非常高效,

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

相反,您應該創建一個JAXBContext這是映射元數據的線程安全初始化版本,從中可以創建marshallers和unmarshallers。

JAXBContext jc = JAXBContext.newInstance(EmpTable.class); 
Unmarshaller unmarshaller = jc.createUnmarshaller(); 
EmpTable objEmpTable = (EmpTable) unmarshaller.unmarshal(file); 
+1

感謝您的答覆和建議... – Navnath 2013-03-08 13:10:30