主要介绍使用jaxb对xml进行解析, 互转.
jaxb 是相对较多的xml工具, 只需要在javaBean的属性上添加相应注解, 就可以使用工具进行解析. 具体使用过程如下:

1. 编写javaBean并添加注解

使用过程中一般常用@XmlRootElement, @XmlAccessorType, @XmlElement, @XmlAttribute四个注解, 其余使用方式可以再自行深入研究.

  1. @XmlRootElement: 根元素
  2. @XmlAccessorType: java对象生成xml文件时对java对象属性的访问方式
  3. 属性为XmlAccessType.FIELD java所有成员变量
  4. @XmlElement: 子节点, name 可指定节点名
  5. @XmlAttribute: 映射为xml文件的属性, name 可指定属性名

javaBean:

  1. @Data
  2. @XmlRootElement(name = "alipay")
  3. @XmlAccessorType(XmlAccessType.FIELD)
  4. class AliPayXml {
  5. @XmlElement(name = "alipay_buyer_login_id" )
  6. private String buyerLoginId;
  7. @XmlElement(name = "alipay_buyer_user_id")
  8. private String buyerUserId;
  9. }

2. 使用 JaxbUtil

JaxbUtil代码

  1. package com.liuzhihang.tool.xml;
  2. import javax.xml.bind.JAXBContext;
  3. import javax.xml.bind.JAXBException;
  4. import javax.xml.bind.Marshaller;
  5. import javax.xml.bind.Unmarshaller;
  6. import java.io.StringReader;
  7. import java.io.StringWriter;
  8. /**
  9. * Jaxb 工具
  10. *
  11. * @author liuzhihang
  12. * @date 2017/11/28 19:13
  13. */
  14. public class JaxbUtil {
  15. private static final String CHARTSET = "UTF-8";
  16. public static String bean2Xml(Object obj) throws JAXBException {
  17. return bean2Xml(obj, CHARTSET);
  18. }
  19. public static String bean2Xml(Object obj, String chartset) throws JAXBException {
  20. JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
  21. Marshaller marshaller = jaxbContext.createMarshaller();
  22. marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
  23. marshaller.setProperty(Marshaller.JAXB_ENCODING, chartset);
  24. StringWriter writer = new StringWriter();
  25. marshaller.marshal(obj, writer);
  26. return writer.getBuffer().toString();
  27. }
  28. public static <T> T xml2Bean(String xmlString, Class<T> clazz) throws JAXBException {
  29. JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
  30. Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
  31. T t = (T) unmarshaller.unmarshal(new StringReader(xmlString));
  32. return t;
  33. }
  34. }

3. 测试代码

待测试字符串: xmlStr

  1. <alipay>
  2. <alipay_buyer_login_id>176****3035</alipay_buyer_login_id>
  3. <alipay_buyer_user_id>2088912868994947</alipay_buyer_user_id>
  4. </alipay>

测试代码:

  1. /**
  2. * @Description:
  3. * @Author: liuzhihang
  4. * @Date: 2017/12/17 23:11
  5. */
  6. public class JaxbTest {
  7. public static void main(String[] args) throws JAXBException {
  8. String aliPayXmlStr = "<alipay>\n" +
  9. " <alipay_buyer_login_id>176****3035</alipay_buyer_login_id>\n" +
  10. " <alipay_buyer_user_id>2088912868994947</alipay_buyer_user_id>\n" +
  11. "</alipay>";
  12. AliPayXml aliPayXml = JaxbUtil.xml2Bean(aliPayXmlStr, AliPayXml.class);
  13. System.out.println(JSON.toJSONString(aliPayXml));
  14. }
  15. }

测试结果:
打印的为json格式结果, 可debugger查看. 同样也可以将javaBean转换为xmlStr

  1. {"buyerLoginId":"176****3035","buyerUserId":"2088912868994947"}