xml与map互转,主要使用dom4j

  1. import org.dom4j.Document;
  2. import org.dom4j.DocumentException;
  3. import org.dom4j.DocumentHelper;
  4. import org.dom4j.Element;
  5. import org.dom4j.io.OutputFormat;
  6. import org.dom4j.io.XMLWriter;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9.  
  10. import java.io.IOException;
  11. import java.io.StringWriter;
  12. import java.util.*;
  13.  
  14. public class XmlUtils {
  15.  
  16. private static final Logger LOGGER = LoggerFactory.getLogger(XmlUtils.class);
  17.  
  18. /**
  19. * @Auther sun
  20. * @DateTime 2019/3/8 下午5:15
  21. * @Description:
  22. * @Param map 生成xml的map数据
  23. * @Param rootName 根结点名称
  24. * @Return: java.lang.String
  25. */
  26. public static String map2xml(Map<String, Object> map, String rootName) {
  27. Document doc = DocumentHelper.createDocument();
  28. Element rootEle = doc.addElement(rootName);
  29. if (null != map && !map.isEmpty()) {
  30.  
  31. Set<Map.Entry<String, Object>> set = map.entrySet();
  32. Iterator<Map.Entry<String, Object>> iter = set.iterator();
  33. while (iter.hasNext()) {
  34. Map.Entry<String, Object> entry = iter.next();
  35. Element ele = rootEle.addElement(entry.getKey());
  36. ele.setText(String.valueOf(entry.getValue()));
  37. }
  38. } else {
  39. LOGGER.warn("[生成XML]Map为空");
  40. }
  41. StringWriter sw = new StringWriter();
  42. OutputFormat format = OutputFormat.createPrettyPrint();
  43. format.setEncoding("utf-8");
  44. try {
  45. XMLWriter xmlWriter = new XMLWriter(sw, format);
  46. xmlWriter.write(doc);
  47. } catch (IOException ex) {
  48. LOGGER.error("[生成XML]生成XML数据失败", ex);
  49. } finally {
  50. try {
  51. sw.close();
  52. } catch (IOException ex) {
  53. LOGGER.error("[生成XML]关闭IO异常", ex);
  54. }
  55. }
  56. return sw.toString();
  57. }
  58.  
  59. /**
  60. * @Auther sun
  61. * @DateTime 2019/3/11 下午1:56
  62. * @Description: xml 转换为 map
  63. * @Param strXML
  64. * @Return: java.util.SortedMap<java.lang.String , java.lang.String>
  65. */
  66. public static SortedMap<String, String> dom4jXMLParse(String strXML) throws DocumentException {
  67. SortedMap<String, String> smap = new TreeMap<String, String>();
  68. Document doc = DocumentHelper.parseText(strXML);
  69. Element root = doc.getRootElement();
  70. for (Iterator iterator = root.elementIterator(); iterator.hasNext(); ) {
  71. Element e = (Element) iterator.next();
  72. smap.put(e.getName(), e.getText());
  73. }
  74. return smap;
  75. }
  76.  
  77. }

  

java的bean与xml互转主要使用Jaxb(java自带的xml转换工具)

  1. public class JaxbUtils {
  2.  
  3. /**
  4. * JavaBean转换成xml.
  5. *
  6. * @param obj
  7. * @return
  8. */
  9. public static String convertToXml(Object obj) {
  10. return convertToXml(obj, "UTF-8");
  11. }
  12.  
  13. /**
  14. * JavaBean转换成xml.
  15. *
  16. * @param obj bean实体
  17. * @param encoding 默认编码UTF-8
  18. * @return
  19. */
  20. private static String convertToXml(Object obj, String encoding) {
  21. String result = null;
  22. try {
  23. JAXBContext context = JAXBContext.newInstance(obj.getClass());
  24. Marshaller marshaller = context.createMarshaller();
  25. marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
  26. marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
  27.  
  28. StringWriter writer = new StringWriter();
  29. marshaller.marshal(obj, writer);
  30. result = writer.toString();
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. }
  34.  
  35. return result;
  36. }
  37.  
  38. /**
  39. * xml转成JavaBean.
  40. *
  41. * @param xml
  42. * @param c
  43. * @return
  44. */
  45. @SuppressWarnings("unchecked")
  46. public static <T> T converyToJavaBean(String xml, Class<T> c) {
  47. T t = null;
  48. try {
  49. JAXBContext context = JAXBContext.newInstance(c);
  50. Unmarshaller unmarshaller = context.createUnmarshaller();
  51. t = (T) unmarshaller.unmarshal(new StringReader(xml));
  52. } catch (Exception e) {
  53. e.printStackTrace();
  54. }
  55.  
  56. return t;
  57. }
  58.  
  59. }

对与xml要转换的bean类使用注解的方式标注(本例子使用了lombok)

  1. @XmlRootElement(name = "xml") 表示根结点名称
  1. @Data
  2. @XmlAccessorType(XmlAccessType.FIELD)
  3. @XmlRootElement(name = "xml")
  4. public class CallBackResponse {
  5. /**
  6. * 返回状态码
  7. */
  8. @XmlElement(name = "return_code")
  9. private String returnCode;
  10. /**
  11. * 返回信息
  12. */
  13. @XmlElement(name = "return_msg")
  14. private String returnMsg;
  15. /**
  16. * 公众账号ID
  17. */
  18. @XmlElement
  19. private String appid;
  20. /**
  21. * 商户号
  22. */
  23. @XmlElement(name = "mch_id")
  24. private String mchId;
  25. /**
  26. * 设备号
  27. */
  28. @XmlElement(name = "device_info")
  29. private String deviceInfo;
  30. /**
  31. * 随机字符串
  32. */
  33. @XmlElement(name = "nonce_str")
  34. private String nonceStr;
  35. /**
  36. * 签名
  37. */
  38. @XmlElement
  39. private String sign;
  40. /**
  41. * 签名类型
  42. */
  43. @XmlElement(name = "sign_type")
  44. private String signType;
  45. /**
  46. * 业务结果
  47. */
  48. @XmlElement(name = "result_code")
  49. private String resultCode;
  50. /**
  51. * 错误代码 SUCCESS/FAIL
  52. */
  53. @XmlElement(name = "err_code")
  54. private String errCode;
  55. /**
  56. * 错误代码描述
  57. */
  58. @XmlElement(name = "err_code_des")
  59. private String errCodeDes;
  60. /**
  61. * 用户标志
  62. */
  63. @XmlElement
  64. private String openid;
  65. /**
  66. * 付款银行
  67. */
  68. @XmlElement(name = "bank_type")
  69. private String bankType;
  70. /**
  71. * 订单金额
  72. */
  73. @XmlElement(name = "total_fee")
  74. private Integer totalFee;
  75. /**
  76. * 微信平台订单号
  77. */
  78. @XmlElement(name = "transaction_id")
  79. private String transactionId;
  80. /**
  81. * 商户订单号
  82. */
  83. @XmlElement(name = "out_trade_no")
  84. private String orderId;
  85. /**
  86. * 支付完成时间
  87. */
  88. @XmlElement(name = "time_end")
  89. private String timeEnd;
  90. /**
  91. * 交易状态
  92. */
  93. @XmlElement(name = "trade_state")
  94. private String tradeState;
  95. /**
  96. * 交易状态描述
  97. */
  98. @XmlElement(name = "trade_state_desc")
  99. private String tradeStateDesc;
  100. /**
  101. * 货币种类
  102. */
  103. @XmlElement(name = "fee_type")
  104. private String feeType;
  105.  
  106. }

Java的xml与map,与Bean互转的更多相关文章

  1. 007-TreeMap、Map和Bean互转、BeanUtils.copyProperties(A,B)拷贝、URL编码解码、字符串补齐,随机字母数字串

    一.转换 1.1.TreeMap 有序Map 无序有序转换 使用默认构造方法: public TreeMap(Map<? extends K, ? extends V> m) 1.2.Ma ...

  2. XML解析与xml和Map集合的互转

    1.XML的解析.首先解析XML文件我们需要先获取到文件的存放路径,获取方法有三种分别获取xml文件不同的存放路径. 代码: public class PropertiesDemo { public ...

  3. java中 数组 list map之间的互转

    三者之间转换关系,一张图清晰呈现. 上代码: 其中的maputils是apache的collection包. package util; import java.util.ArrayList; imp ...

  4. Java JSON、XML文件/字符串与Bean对象互转解析

    前言      在做web或者其他项目中,JSON与XML格式的数据是大家经常会碰见的2种.在与各种平台做数据对接的时候,JSON与XML格式也是基本的数据传递格式,本文主要简单的介绍JSON/XML ...

  5. XML转换为Map通用算法实现 Java版本(Stax实现)

    目前项目中需要将XML转换为Map,下面给出了自己的代码实现. 后续将为大家提供Dom版本的实现. 请各路大神给予各种优良实现. 场景: 在项目中需要解析XML文本字符串,需要将XML文本字符串映射为 ...

  6. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  7. xml和map互转工具类

    /** * xml转map工具类 * @author zhangyao * */ public class XmlToMapUtil { /** * xml转map 不带属性 * @param xml ...

  8. 解析xml报文,xml与map互转

    这段时间写了一个关于xml报文的工具类,做一下具体的讲解: xml文本 <NTMMessage version="1.03"> <NTMHeader> &l ...

  9. java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

    一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...

随机推荐

  1. JEECG 上传插件升级-标签

    前言: 现有的uploadify上传是基于swf的,随着H5的普及,flash即将退出历史舞台,JEECG团队本着与时俱进的原则,将全面升级JEECG系统中的上传功能,采用新式上传插件plupload ...

  2. Eclipse使用Maven创建Web时错误:Could not resolve archetype

    请检查maven的setting 是否有问题.window->Perfenence->maven->User Settings里 看 Gloal Setting和User Setti ...

  3. 2017-11-11 Sa Oct Is it online

    2017-11-11 Sa Oct Is it online 9:07 AM After breakfast I tried connecting to the course selection sy ...

  4. 关于ASP.NET 服务器报错 Server Error in '/' Application Runtime Error 错误及解决方法

    今天遇到一个错误 程序在服务器上运行时报错 先贴上错误代码 自己也在网上找了一些解决方法,把错误定位到服务器的配置文件也就是Web.config的问题, 于是在system.web节点下 加上cust ...

  5. Echars 地图属性详解

    1.引入echarts库文件 <script charset="utf-8" type="text/javascript" language=" ...

  6. destructuring

    解构(结构化赋值): 解构过程中,具备赋值和变量声明两个功能 目的在于把等号左右长的相似的两个东西内部的值取出来. 对象数组都可以参与解构: let obj = {name: ‘duyi’,age: ...

  7. EOS源码

    [EOS源码] 1.在 libraries/chain/include/eosio/chain/ 目录下. permission_level 定义如下:   account_name.permissi ...

  8. Java框架spring 学习笔记(六):属性注入

    属性注入:创建对象的时候,向类里面的属性设置值. Java属性注入有三种方法: 使用set方法注入 有参数构造注入 使用接口注入 Spring框架里面的属性注入方式 有参数构造属性注入 set方法属性 ...

  9. 微信小程序如何接入?

    1.线下扫码:小程序最基础的获取方式,是二维码.大家可以打开扫一扫,通过微信扫描线下二维码的方式进入小程序.这也是官方宣传中,最普遍的实用场景. 如何生成小程序导入码? 2.微信搜索 3.公众号关联 ...

  10. centos7 安装 transmission

    貌似官方文档 注意:是centos7才能用此方法 Step 1. First, you need to enable EPEL repository on your system. yum insta ...