主要介绍使用jaxb对xml进行解析, 互转.
jaxb 是相对较多的xml工具, 只需要在javaBean的属性上添加相应注解, 就可以使用工具进行解析. 具体使用过程如下:
1. 编写javaBean并添加注解
使用过程中一般常用@XmlRootElement, @XmlAccessorType, @XmlElement, @XmlAttribute四个注解, 其余使用方式可以再自行深入研究.
@XmlRootElement: 根元素@XmlAccessorType: java对象生成xml文件时对java对象属性的访问方式属性为XmlAccessType.FIELD 指java所有成员变量@XmlElement: 子节点, name 可指定节点名@XmlAttribute: 映射为xml文件的属性, name 可指定属性名
javaBean:
@Data@XmlRootElement(name = "alipay")@XmlAccessorType(XmlAccessType.FIELD)class AliPayXml {@XmlElement(name = "alipay_buyer_login_id" )private String buyerLoginId;@XmlElement(name = "alipay_buyer_user_id")private String buyerUserId;}
2. 使用 JaxbUtil
JaxbUtil代码
package com.liuzhihang.tool.xml;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;/*** Jaxb 工具** @author liuzhihang* @date 2017/11/28 19:13*/public class JaxbUtil {private static final String CHARTSET = "UTF-8";public static String bean2Xml(Object obj) throws JAXBException {return bean2Xml(obj, CHARTSET);}public static String bean2Xml(Object obj, String chartset) throws JAXBException {JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());Marshaller marshaller = jaxbContext.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.setProperty(Marshaller.JAXB_ENCODING, chartset);StringWriter writer = new StringWriter();marshaller.marshal(obj, writer);return writer.getBuffer().toString();}public static <T> T xml2Bean(String xmlString, Class<T> clazz) throws JAXBException {JAXBContext jaxbContext = JAXBContext.newInstance(clazz);Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();T t = (T) unmarshaller.unmarshal(new StringReader(xmlString));return t;}}
3. 测试代码
待测试字符串: xmlStr
<alipay><alipay_buyer_login_id>176****3035</alipay_buyer_login_id><alipay_buyer_user_id>2088912868994947</alipay_buyer_user_id></alipay>
测试代码:
/*** @Description:* @Author: liuzhihang* @Date: 2017/12/17 23:11*/public class JaxbTest {public static void main(String[] args) throws JAXBException {String aliPayXmlStr = "<alipay>\n" +" <alipay_buyer_login_id>176****3035</alipay_buyer_login_id>\n" +" <alipay_buyer_user_id>2088912868994947</alipay_buyer_user_id>\n" +"</alipay>";AliPayXml aliPayXml = JaxbUtil.xml2Bean(aliPayXmlStr, AliPayXml.class);System.out.println(JSON.toJSONString(aliPayXml));}}
测试结果:
打印的为json格式结果, 可debugger查看. 同样也可以将javaBean转换为xmlStr
{"buyerLoginId":"176****3035","buyerUserId":"2088912868994947"}
