2013-03-08 1 views
1

У меня есть один файл XML, который я пытаюсь загрузить с помощью JaxB.Не удалось прочитать атрибут read 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); 

Теперь проблема я могу прочитать полный объект, и это данные правильно, за исключением атрибута NAME в таблице тегов. Может ли кто-нибудь сказать мне, что есть какая-то неправильная имплантизация или что-то еще?

ответ

0

ОТОБРАЖЕНИЕ НА XML ATTRIBUTES

Вы должны аннотировать на 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); 
+1

Спасибо за ур и предложение ... – Navnath

 Смежные вопросы

  • Нет связанных вопросов^_^