1. 程式人生 > >xml 解析成物件,物件轉成xml

xml 解析成物件,物件轉成xml

此筆記留作備用,被解析的物件需要新增 @XmlRootElement 註解

xml 解析成bean

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
import java.nio.charset.Charset;
    /
    **
     * xml 解析成bean
     * @param xmlString
     * @param clazz
     * @param <T>
     * @return
     */
    public static final <T> T xml2bean(String xmlString, Class<T> clazz) {
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            return (T) unmarshaller.unmarshal(new StringReader(xmlString));
        } catch (JAXBException je) {
            logger.error("解析xml失敗,失敗的bean是: {}", clazz);
            logger.error("解析失敗的xml是: {}", xmlString);
            throw new UnsupportedOperationException(je);
        }
    }

bean 轉成xml


    public static final String bean2xml(Object object, Charset charset) {
        String XML_DECLARATION_UTF8 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
        String XML_DECLARATION_GBK = "<?xml version=\"1.0\" encoding=\"GBK\"?>";
        String result = "";
        JAXBContext context;
        try {
            context = JAXBContext.newInstance(object.getClass());
            Marshaller m = context.createMarshaller();
            m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
            m.setProperty(Marshaller.JAXB_ENCODING, charset.name());
            StringWriter writer = new StringWriter();
            m.marshal(object, writer);
            result = writer.toString();
            result = (charset.name().equalsIgnoreCase("GBK") ? XML_DECLARATION_GBK : XML_DECLARATION_UTF8) + result;
            return result;
        } catch (JAXBException je) {
            logger.info("轉換失敗,失敗的bean是: {}", object.toString());
            logger.info("轉換失敗的字符集是: {}", charset);
            throw new UnsupportedOperationException(je);
        }
    }
    

測試

	public static void main(String[] args) {
		Rule dr = new Rule();
		dr.setId("1111");
		dr.setlExp(null);
		dr.setRelExp("sdsddsd");
		String bean2xml = bean2xml(dr, Charset.forName("UTF-8"));
		//<?xml version="1.0" encoding="UTF-8"?><Rule><id>1111</id><relExp>sdsddsd</relExp></Rule>
		System.out.println(bean2xml);
		
		Rule xml2bean = xml2bean(bean2xml, DrlRule.class);
		//Rule [id=1111, relExp=sdsddsd]
		System.out.println(xml2bean);
	}