使用JDK原生類實現xml序列化返序列化

先看目錄結構

xml序列化+返序列化工具

package com.yh.xml;

import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlSchema;


import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.transform.stream.StreamResult;
import java.io.StringReader;
import java.io.StringWriter;

public class XmlDemo {

    public static void main(String[] args) throws JAXBException {
        JAXBContext jc = JAXBContext.newInstance(Domain.class);
        //複合對象
        Domain domain = new Domain();
        D d = new D();
        d.setParam1("p1");
        d.setParam2("p2");

        domain.setType("kvm");
        domain.setOs("linux");
        domain.setD(d);

        /*Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(domain, System.out);//輸出到控制檯*/
        System.out.println("=======序列化=======");
        String marshal = marshal(domain.getClass(), domain);
        System.out.println(marshal);
        System.out.println("=======返序列化=======");
        Domain domain1 = unmarshal(marshal, Domain.class);
        System.out.println(domain1);
    }


    /**
     * 把xml配置轉換成對象
     *
     * @param xml
     * @param classObj
     * @return
     */

    public static <T> T unmarshal(String xml, Class<T> classObj) {
        T obj;
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(classObj);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            obj = (T) unmarshaller.unmarshal(new StringReader(xml));
            return obj;
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 把對象轉換成xml配置
     *
     * @param classObj
     * @param obj
     * @return
     */

    public static String marshal(Class<?> classObj, Object obj) {
        String xmlStr = "";
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(classObj);
            Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");// //編碼格式
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串
            //marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);// 是否省略xm頭聲明信息
            StringWriter out = new StringWriter();
            marshaller.marshal(obj, new StreamResult(out));
            xmlStr = out.toString();
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return xmlStr;
    }

}

bean 複合類

package com.yh.xml;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Domain {
    private String type;
    private String os;
    private D d;

    //xml 屬性註解
    @XmlAttribute
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getOs() {
        return os;
    }

    public void setOs(String os) {
        this.os = os;
    }

    public D getD() {
        return d;
    }

    public void setD(D d) {
        this.d = d;
    }

    @Override
    public String toString() {
        return "Domain{" +
                "type='" + type + '\'' +
                ", os='" + os + '\'' +
                ", d=" + d +
                '}';
    }
}

class D {
    private String param1;
    private String param2;

    public String getParam1() {
        return param1;
    }

    public void setParam1(String param1) {
        this.param1 = param1;
    }

    public String getParam2() {
        return param2;
    }

    public void setParam2(String param2) {
        this.param2 = param2;
    }

    @Override
    public String toString() {
        return "D{" +
                "param1='" + param1 + '\'' +
                ", param2='" + param2 + '\'' +
                '}';
    }
}

package-info.java

位置必須是bean 所在同級包下才能生效

//命名空間
@XmlSchema(namespace="http://www.baidu.com", elementFormDefault = XmlNsForm.QUALIFIED)
package com.yh.xml;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

執行結果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<domain type="kvm" xmlns="http://www.baidu.com">
    <d>
        <param1>p1</param1>
        <param2>p2</param2>
    </d>
    <os>linux</os>
</domain>

Domain{type='kvm', os='linux', d=D{param1='p1', param2='p2'}}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章