1. import java.util.List;
  2.  
  3. import org.dom4j.Document;
  4. import org.dom4j.DocumentHelper;
  5. import org.dom4j.Element;
  6.  
  7. import com.alibaba.fastjson.JSONArray;
  8. import com.alibaba.fastjson.JSONObject;
  9.  
  10. public class XmlToJson {
  11. /**
  12. * 将xml转换为JSON对象
  13. *
  14. * @param xml
  15. * xml字符串
  16. * @return
  17. * @throws Exception
  18. */
  19. public static JSONObject xmltoJson(String xml) throws Exception {
  20. JSONObject jsonObject = new JSONObject();
  21. Document document = DocumentHelper.parseText(xml);
  22. // 获取根节点元素对象
  23. Element root = document.getRootElement();
  24. iterateNodes(root, jsonObject);
  25. return jsonObject;
  26. }
  27.  
  28. /**
  29. * 遍历元素
  30. *
  31. * @param node
  32. * 元素
  33. * @param json
  34. * 将元素遍历完成之后放的JSON对象
  35. */
  36. @SuppressWarnings("unchecked")
  37. public static void iterateNodes(Element node, JSONObject json) {
  38. // 获取当前元素的名称
  39. String nodeName = node.getName();
  40. // 判断已遍历的JSON中是否已经有了该元素的名称
  41. if (json.containsKey(nodeName)) {
  42. // 该元素在同级下有多个
  43. Object Object = json.get(nodeName);
  44. JSONArray array = null;
  45. if (Object instanceof JSONArray) {
  46. array = (JSONArray) Object;
  47. } else {
  48. array = new JSONArray();
  49. array.add(Object);
  50. }
  51. // 获取该元素下所有子元素
  52. List<Element> listElement = node.elements();
  53. if (listElement.isEmpty()) {
  54. // 该元素无子元素,获取元素的值
  55. String nodeValue = node.getTextTrim();
  56. array.add(nodeValue);
  57. json.put(nodeName, array);
  58. return;
  59. }
  60. // 有子元素
  61. JSONObject newJson = new JSONObject();
  62. // 遍历所有子元素
  63. for (Element e : listElement) {
  64. // 递归
  65. iterateNodes(e, newJson);
  66. }
  67. array.add(newJson);
  68. json.put(nodeName, array);
  69. return;
  70. }
  71. // 该元素同级下第一次遍历
  72. // 获取该元素下所有子元素
  73. List<Element> listElement = node.elements();
  74. if (listElement.isEmpty()) {
  75. // 该元素无子元素,获取元素的值
  76. String nodeValue = node.getTextTrim();
  77. json.put(nodeName, nodeValue);
  78. return;
  79. }
  80. // 有子节点,新建一个JSONObject来存储该节点下子节点的值
  81. JSONObject object = new JSONObject();
  82. // 遍历所有一级子节点
  83. for (Element e : listElement) {
  84. // 递归
  85. iterateNodes(e, object);
  86. }
  87. json.put(nodeName, object);
  88. return;
  89. }
  90.  
  91. /**
  92. * 测试的main方法
  93. */
  94. public static void main(String[] args) throws Exception {
  95. String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<root>" + " <mdcardno>查询卡号</mdcardno>"
  96. + " <count>返回明细条数</count>" + " <rd>" + " <trxzone>交易地区号1</trxzone>"
  97. + " <trxcurr>交易币种1</trxcurr>" + " </rd>" + " <rd>" + " <trxzone>交易地区号3</trxzone>"
  98. + " <trxcurr>交易币种3</trxcurr>" + " </rd>" + " <rd>" + " <trxzone>交易地区号2</trxzone>"
  99. + " <trxcurr>交易币种2</trxcurr>" + "</rd>" + "</root>";
  100. JSONObject jsonObject = xmltoJson(xml);
  101. System.out.println(jsonObject);
  102. }
  103. }

使用dom4j解析xml为json对象的更多相关文章

  1. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  2. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  3. Dom4j解析xml

    public class Dom4jTest { // Dom4j解析xml // 因为所有的方法都需要Dom树 static Document document = null; static Ele ...

  4. java使用dom4j解析xml文件

    关于xml的知识,及作用什么的就不说了,直接解释如何使用dom4j解析.假如有如下xml: dom4j解析xml其实很简单,只要你有点java基础,知道xml文件.结合下面的xml文件和java代码, ...

  5. 【收藏用】--切勿转载JAVA 使用Dom4j 解析XML

    原帖地址 : http://blog.csdn.NET/yyywyr/article/details/38359049 解析XML的方式有很多,本文介绍使用dom4j解析xml. 1.环境准备 (1) ...

  6. 使用DOM4J解析XMl文件与读取XML文件

    XML文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...

  7. dom4j解析XML的CURD操作

    在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...

  8. DOM4J解析XML文档

    Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...

  9. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

随机推荐

  1. (笔记)ubuntu中取消文件夹或文件等右下解一把锁的标志的方法

    ubuntu中取消文件夹或文件等右下解一把锁的标志的方法   方法:   sudo chmod -R 777 路径(文件夹或文件)   对文件递归做改变权限为可读可写可运行,即可.

  2. Lucene系列一:搜索引擎核心理论

    一.为什么需要搜索引擎 问题1:数据库索引的原理是怎样的? 索引原理:对列值创建排序存储,数据结构={列值.行地址}.在有序数据列表中就可以利用二分查找快速找到要查找的行的地址,再根据地址直接取行数据 ...

  3. (原)使用android studio ndk开发流程

    先使用android stuido创建一个app工程,创建工程的时候,.gradle目录结构下为2.8目录.(note:2.10目录为后续更新结果出现.) 依次修改上述红色方框标注部分内容: 1)修改 ...

  4. Apache ZooKeeper

    https://zookeeper.apache.org/ https://zh.wikipedia.org/wiki/Apache_ZooKeeper Apache ZooKeeper是Apache ...

  5. Qt SDK的x64与x86版本号以及与VS的配合

    今天遇到一个奇怪的问题.我用Qt的64位版本号,动态载入一个SDK的dll,不管怎样都是载入失败.QLibrary也没什么有价值的信息. 实在没辙,就用VS2013写了个小程序,用LoadLibrar ...

  6. asp.net Core EF core ( Entity Framework 7 ) 数据库更新维护

    CreateData­baseIfNotExists等之前的API已经废弃,现在采用的是微软封装好,简化.高效的API,migrations 因为,旧API,要付出高昂的代价,以及局限性 打开VS20 ...

  7. 第10章:awk进阶操作

    第10章:awk进阶操作 在第4章:查找与替换简单的讲解了awk的使用,本章介绍详细讲解awk的使用.awk是一个强大的文本分析工具,简单的说awk就是把文件逐行的读入, 以空格为默认分隔符将每行切片 ...

  8. Java常量池的理解

    1.常量池的好处常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享.例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中.(1)节省内存空间:常量池中所有相同的字符串常 ...

  9. Mac/win eclipse genymotion 插件下载地址

    eclipse -->new install --> 填写该地址 (目前最新的地址) https://dl.genymotion.com/eclipse/

  10. 续:纠正:ubuntu【7.04】可以安装,而且完美的安装 ! for《Oracle-10.2.0.1,打补丁10.2.0.5:在 debian 版本4【不含4】以上,及 ubuntu 7.04【不含7.04】以上都可以安装!》

    n次的测试后,最终证明,如下做法,可以完美安装. 中间都不带任何一个错误的!!!完美! dhclient vi /etc/profile ll cd /etc/apt/ mv sources.list ...