1

JaxB を使用してロードしようとしている XML ファイルが 1 つあります。

<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ランタイム

以下は 1 行のコードですが、あまり効率的ではありません。

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 に答える