之前的xml文件转化为json是利用json-lib或者递归方式实现的,在效率方面难免有些不足.经过改进,利用栈实现了非递归的方式,首先需要导入dom4j的jar包。


import com.alibaba.fastjson.JSONObject;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.List;
import java.util.Stack;/*** Created by 东方电视台 on 2017/7/28.*/
public class xmlTojson {public static void main(String[] args) throws Exception{JSONObject result = getJson("test.xml");System.out.println(result.toString());}public static Document readXml(String filename) throws DocumentException {Document document = null;try{//获取xml文件File file = new File(filename);//创建SAXReader对象SAXReader reader = new SAXReader();//读取文件document = reader.read(file);}catch (DocumentException e){e.printStackTrace();}return  document;}public static JSONObject getJson(String filename) throws Exception {JSONObject jsonObj = new JSONObject();try {Document doc = readXml(filename);Element root = doc.getRootElement();Stack<Element> stackElement = new Stack<Element>();Stack<JSONObject> stackJson = new Stack<JSONObject>();stackElement.push(root);stackJson.push(jsonObj);while (!stackElement.isEmpty()) {Element element = stackElement.pop();JSONObject json = stackJson.pop();List<Element> childList = element.elements();//判断该节点的子节点下是否为叶子节点for (Element e : childList) {//如果子节点为叶子节点if (e.elements().isEmpty()) {json.put(e.getName(), e.getText());} else {JSONObject jsonNew = new JSONObject();json.put(e.getName(), jsonNew);stackElement.push(e);stackJson.push(jsonNew);}}}} catch (Exception e) {e.printStackTrace();}return jsonObj;}
}

xml TO json(非递归实现)相关推荐

  1. php3级分类,关于php非递归三级分类输出json数据

    ** 有以下数据结构表 ** ** 需要输出json格式为: ** pickerValueArray: [ {label: 'phone',value: 0,children: [ { label:  ...

  2. 【科普】:10分钟看明白XML和JSON

    引言 NOKIA 有句著名的广告语:"科技以人为本".任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个 ...

  3. 常见Serialize技术探秘(ObjectXXStream、XML、JSON、JDBC byte编码、Protobuf)

    目前业界有各种各样的网络输出传输时的序列化和反序列化方案,它们在技术上的实现的初衷和背景有较大的区别,因此在设计的架构也会有很大的区别,最终在落地后的:解析速度.对系统的影响.传输数据的大小.可维护性 ...

  4. XML和JSON 数据交换格式

    为什么80%的码农都做不了架构师?>>>    一.什么是数据交换格式? 客户端与服务器常用数据交换格式xml.json.html 二.数据交换格式应用场景 移动端(安卓.IOS)通 ...

  5. xml转json和实体类的两种方式

    本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...

  6. java树状结构递归与非递归实现,外加sql递归实现

    关于下列面出现的泛型自行修改 1.java8流式非递归实现 public Map<String, List<E>> selectCatalogue(int type, int ...

  7. Ajax--概述、xhr对象的常用属性和方法、xhr的常用事件、xhr对象发送POST请求、xhr对象发送GET请求、xhr对象的兼容性问题、数据交换格式(XML、JSON)

    一.概述 1.1 发展历程 在开始之前先来看一下Ajax的工作原理吧,如下图所示: Ajax全称Asynchronous javascript and xml(异步 JavaScript 和 XML) ...

  8. XML转Json 设置指定节点为数组

    原XML <response><itemList><item><number>5</number></item></ite ...

  9. XML与Json解析

    目录 XML解析 一.DOM4J解析XML文件(非重点): 二.Dom4J之XPATH解析XML(非重点) 三.生成XML Json解析(重点) XML解析 解析网络xml文件:这里我们提供一个网址: ...

最新文章

  1. Udacity机器人软件工程师课程笔记(十九) - 3D感知介绍 - 主动/被动式传感器、RGB-D相机、点云
  2. pycharm点击右上角退出程序时terminate和disconnect区别?(别用disconnect)
  3. hdu 3401(单调队列优化dp)
  4. mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
  5. H264学习_基本数据结构
  6. collector list 多个分组_Java 8嵌套(多级)分组依据
  7. matlab破损皮革定位,matlab-code-of-TDOAFDOa 干扰源定位代码,应该在 的求解过程中有帮助。 276万源代码下载- www.pudn.com...
  8. 一些难懂的笑话,看看你懂得多少? [转帖]
  9. c语言一维数组定义可用字母吗,C语言一维数组的定义和引用
  10. vim配置Nerdtree
  11. JAVA设计模式之3-抽象工厂模式
  12. 邮箱容量多大?163邮箱发邮件无限容量解读
  13. 16.PIO源码详解6-PIO_TX_ENGINE模块(PIO_TX_ENGINE.v)剖析
  14. 按自己的需要获取对象中的属性
  15. 超级电视与海信电视争第一,这是一场胜负已定的战争
  16. 为论文建立索引的一种方法
  17. 关于双网卡PVE:openwrt(LEDE) + win10直通核显+ DSM918+ 实现HDMI与声卡直通HTPC的解决方案!!
  18. 英雄联盟LPL比赛数据可视化详细教程,可视化的魅力,你值得拥有!!!
  19. 技术不局限于赚钱,还应当保护我们的家人
  20. 《偶像练习生》、《创造101》现象级的爆发还能在中国出现吗?【文末有彩蛋】...

热门文章

  1. [HNOI2008]水平可见直线 半平面交
  2. php函数引用参数解惑《细说php》
  3. 边工作边刷题:70天一遍leetcode: day 56-1
  4. html加载js那些事
  5. 《设计模式详解》创建型模式 - 单例模式
  6. 【实习之T100开发】T100 单档程序开发(1)开发流程
  7. 【Spring AOP】基于注解的 AOP 编程
  8. 【嵌入式】Linux开发工具make及makefile设计
  9. 《Algorithms》Comparable 实现排序大全
  10. 索引书单(持续更新中)