1. 程式人生 > >利用JAXB實現xml和bean之間的轉換(一)

利用JAXB實現xml和bean之間的轉換(一)

JAXB能夠使用Jackson對JAXB註解的支援實現(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,這樣一來可以更好的標誌可以轉換為JSON物件的JAVA類。

JDK中JAXB相關的重要Class和Interface:

JAXBContext類,是應用的入口,用於管理XML/Java繫結資訊。

Marshaller介面,將Java物件序列化為XML資料。

Unmarshaller介面,將XML資料反序列化為Java物件。

JDK中JAXB相關的重要Annotation:

一般用到的就幾個:

@XmlRootElement:表示對映到根目錄標籤元素


@XmlElement:表示對映到子元素

@XmlAttribute:表示對映到屬性

@XmlElementWrapper :表示型別是集合元素的子元素的上層目錄

要把實現相互轉換,首先你得根據目錄結構設計類物件

比如xml中有一下目錄:

<A>
    <B></B>
    <C c=".."></C>
    <D>
        <E e="...">
            <F></F>
            <G>
                <H></H>
            </G>
            <G>
                <H></H>
                <M></M>
            </G>
            <G>
                <H></H>
                <M></M>
            </G>
            <G>
                <H></H>
                <M></M>
            </G>
        </E>
    </D>
</A>

那麼Java Bean 有ClassA、ClaccC、ClassD、ClassE、ClassG5個類

對於JAXB相關的重要Annotation的宣告,如@Xml.....,可以放在成員變數的setter()getter()方法上,兩者中任選其一即可,但決不能放在成員變數上,否則執行將丟擲異常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException。

ClassA

@XmlRootElement(name = "A")
Class ClassA{
   private Object b;
   private C c;
   private D d;

@XmlElement(name = "B")
getB();
setB();

@XmlElement(name = "C")
getC();
setC();

@XmlElement(name = "D")
getD();
setD();

}

ClassC

@XmlRootElement(name = "C")
Class ClassC{
   private Object c;

@XmlAttribute(name = "c")
getC();
setC();
}
ClassD
@@XmlRootElement(name = "D")
Class ClassD{
   private E e;

@XmlElement(name = "E")
getE();
setE();

}

ClassE
@@XmlRootElement(name = "E")
Class ClassE{
   private Object e;
   private Object f;
   private G g;

@XmlAttribute(name = "e")
getE();
setE();

@XmlElement(name = "F")
getF();
setF();

@XmlElement(name = "G")
getG();
setG();

}

ClassG
@XmlRootElement(name = "G")
Class ClassG{
   private Object h;
   private Object m;

@XmlAttribute(name = "H")
getH();
setH();

@XmlAttribute(name = "M")
getM();
setM();
}

下面介紹如何將xml檔案轉換為Bean

public static void main(String[] args) {
        //xml轉換成bean
        try {
            File file = new File("C:\\file1.xml");
            JAXBContext jaxbContext = JAXBContext.newInstance(A.class);
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            A a = (A) jaxbUnmarshaller.unmarshal(file);
            System.out.println(fox.toString());
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
如果xml檔案中有中文,記得把編碼方式從UTF-8變為GBK

將bean轉換為xml

這個之後再來說