主要介绍使用jaxb对xml进行解析, 互转.
jaxb 是相对较多的xml工具, 只需要在javaBean的属性上添加相应注解, 就可以使用工具进行解析. 具体使用过程如下:
1. 编写javaBean并添加注解
使用过程中一般常用@XmlRootElement, @XmlAccessorType, @XmlElement, @XmlAttribute四个注解, 其余使用方式可以再自行深入研究.
1 2 3 4 5
| @XmlRootElement: 根元素 @XmlAccessorType: java对象生成xml文件时对java对象属性的访问方式 属性为XmlAccessType.FIELD 指java所有成员变量 @XmlElement: 子节点, name 可指定节点名 @XmlAttribute: 映射为xml文件的属性, name 可指定属性名
|
javaBean:
1 2 3 4 5 6 7 8 9 10 11
| @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代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| 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;
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
1 2 3 4
| <alipay> <alipay_buyer_login_id>176****3035</alipay_buyer_login_id> <alipay_buyer_user_id>2088912868994947</alipay_buyer_user_id> </alipay>
|
测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
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
1
| {"buyerLoginId":"176****3035","buyerUserId":"2088912868994947"}
|