xml 解析成物件,物件轉成xml
阿新 • • 發佈:2018-11-21
此筆記留作備用,被解析的物件需要新增 @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); }