1. package com.people.xmlToSql;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.io.StringWriter;
  5. import org.jdom.Document;
  6. import org.jdom.input.SAXBuilder;
  7. import org.jdom.output.Format;
  8. import org.jdom.output.XMLOutputter;
  9. /**
  10. * 读取一个xml文件返回string
  11. * @author lmb
  12. *
  13. */
  14. public class T {
  15. /**
  16. * 加载xml文件
  17. * @return Document
  18. */
  19. public static Document load(){
  20. Document document=null;
  21. String url="E://QQ//batch2.xml";
  22. try {
  23. SAXBuilder reader = new SAXBuilder();
  24. document=reader.build(new File(url));
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. }
  28. return document;
  29. }
  30.  
  31. /**
  32. * 将xml文件转换为String串
  33. * @return
  34. */
  35. public static String XmlToString(){
  36. Document document=null;
  37. document=load();
  38.  
  39. Format format =Format.getPrettyFormat();
  40. format.setEncoding("UTF-8");//设置编码格式
  41.  
  42. StringWriter out=null; //输出对象
  43. String sReturn =""; //输出字符串
  44. XMLOutputter outputter =new XMLOutputter();
  45. out=new StringWriter();
  46. try {
  47. outputter.output(document,out);
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. }
  51. sReturn=out.toString();
  52. return sReturn;
  53. }
  54. }

  

  1. package com.people.xmlToSql;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Set;
  8. import net.sf.json.JSONObject;
  9. import org.apache.log4j.Logger;
  10. import org.dom4j.Document;
  11. import org.dom4j.DocumentException;
  12. import org.dom4j.DocumentHelper;
  13. import org.dom4j.Element;
  14. import org.dom4j.Namespace;
  15. import org.dom4j.QName;
  16. /**
  17. * 解析xml的工具类
  18. * 1、将多层级xml解析为Map
  19. * 2、将多层级xml解析为Json
  20. *
  21. * @author lmb
  22. *
  23. */
  24. public class T1 {
  25.  
  26. public static Logger logger = Logger.getLogger(T1.class);
  27. public static void main(String[] args) {
  28. // 获取一个xml文件
  29. String textFromFile = T.XmlToString();
  30. //将xml解析为Map
  31. // Map resultMap = xml2map(textFromFile);
  32. //将xml解析为Json
  33. String resultJson = xml2Json(textFromFile);
  34.  
  35. }
  36.  
  37. /**
  38. * 将xml格式响应报文解析为Json格式
  39. * @param responseXmlTemp
  40. * @return
  41. */
  42. public static String xml2Json(String responseXmlTemp) {
  43. Document doc = null;
  44. try {
  45. doc = DocumentHelper.parseText(responseXmlTemp);
  46. } catch (DocumentException e) {
  47. logger.error("parse text error : " + e);
  48. }
  49. Element rootElement = doc.getRootElement();
  50. Map<String,Object> mapXml = new HashMap<String,Object>();
  51. element2Map(mapXml,rootElement);
  52. String jsonXml = JSONObject.fromObject(mapXml).toString();
  53. System.out.println("Json >>> " + jsonXml);
  54. return jsonXml;
  55. }
  56. /**
  57. * 将xml格式响应报文解析为Map格式
  58. * @param responseXmlTemp
  59. * @param thirdXmlServiceBean
  60. * @return
  61. * @throws DocumentException
  62. */
  63. public static Map<String, Object> xml2map(String responseXmlTemp) {
  64. Document doc = null;
  65. try {
  66. doc = DocumentHelper.parseText(responseXmlTemp);
  67. } catch (DocumentException e) {
  68. logger.error("parse text error : " + e);
  69. }
  70. Element rootElement = doc.getRootElement();
  71. Map<String,Object> mapXml = new HashMap<String,Object>();
  72. element2Map(mapXml,rootElement);
  73. System.out.println("Map >>> " + mapXml);
  74. return mapXml;
  75. }
  76. /**
  77. * 使用递归调用将多层级xml转为map
  78. * @param map
  79. * @param rootElement
  80. */
  81. public static void element2Map(Map<String, Object> map, Element rootElement) {
  82.  
  83. //获得当前节点的子节点
  84. List<Element> elements = rootElement.elements();
  85. if (elements.size() == 0) {
  86. //没有子节点说明当前节点是叶子节点,直接取值
  87. map.put(rootElement.getName(),rootElement.getText());
  88. }else if (elements.size() == 1) {
  89. //只有一个子节点说明不用考虑list的情况,继续递归
  90. Map<String,Object> tempMap = new HashMap<String,Object>();
  91. element2Map(tempMap,elements.get(0));
  92. map.put(rootElement.getName(),tempMap);
  93. }else {
  94. //多个子节点的话就要考虑list的情况了,特别是当多个子节点有名称相同的字段时
  95. Map<String,Object> tempMap = new HashMap<String,Object>();
  96. for (Element element : elements) {
  97. tempMap.put(element.getName(),null);
  98. }
  99. Set<String> keySet = tempMap.keySet();
  100. for (String string : keySet) {
  101. Namespace namespace = elements.get(0).getNamespace();
  102. List<Element> sameElements = rootElement.elements(new QName(string,namespace));
  103. //如果同名的数目大于1则表示要构建list
  104. if (sameElements.size() > 1) {
  105. List<Map> list = new ArrayList<Map>();
  106. for(Element element : sameElements){
  107. Map<String,Object> sameTempMap = new HashMap<String,Object>();
  108. element2Map(sameTempMap,element);
  109. list.add(sameTempMap);
  110. }
  111. map.put(string,list);
  112. }else {
  113. //同名的数量不大于1直接递归
  114. Map<String,Object> sameTempMap = new HashMap<String,Object>();
  115. element2Map(sameTempMap,sameElements.get(0));
  116. map.put(string,sameTempMap);
  117. }
  118. }
  119. }
  120. }
  121.  
  122. }

  

多级xml解析方案的更多相关文章

  1. XML解析方案

    在iOS中,解析XML的手段有很多 苹果原生 NSXMLParser:SAX方式解析,使用简单 第三方框架 libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOM和SAX方式解析 GDa ...

  2. iOS开发之网络数据解析(二)--XML解析简介

    前言:本篇随笔介绍的是XML解析. 正文: 1.XML解析方式有2两种: DOM:一次性将整个XML数据加载进内存进行解析,比较适合解析小文件 SAX:从根元素开始,按顺序一个元素一个元素往下解析,比 ...

  3. 使用XWAF框架(5)——XML解析器:CXDP

    XWAF推出了自己的组合式XML文档解析器,英文名叫:“CXDP”,是“Combined XML Document Parser”的缩写.核心代码属XWAF原创,注释.日志和帮助文档采用全中文描述,特 ...

  4. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

  5. JavaEE:XML解析

    XML解析技术概述1.XML 技术主要企业应用1)存储和传输数据 2)作为框架的配置文件2.使用xml 存储和传输数据涉及到以下两点1)通过程序生成xml2)读取xml 中数据 ---- xml 解析 ...

  6. XML解析(一) DOM解析

    XML解析技术主要有三种: (1)DOM(Document Object Model)文档对象模型:是 W3C 组织推荐的解析XML 的一种方式,即官方的XML解析技术. (2)SAX(Simple ...

  7. iOS - - JSON 和 XML解析

    JSON 和 XML 一.JSON 1.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 2.JSON的格 ...

  8. XML解析-Dom4j的DOM解析方式更新XML

    Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 1.更新XML 1.1.写出内容到xml文 ...

  9. nodeName,nodeValue未知 xml 入库方案 The ElementTree iterparse Function

    import xml.etree.ElementTree as ET from lxml.html import * from xmljson import badgerfish as bf from ...

随机推荐

  1. 自定义Aspect风格的AOP框架

    本篇博客参考<架构探险--从零开始写java web框架>4.3章节 1代理接口: package smart.myaop.framework; public interface Prox ...

  2. spring-第二篇ApplicationContext国际化及事件机制

    1.ApplicationContext接口获取spring容器      ApplicationContext是BeanFactory接口的子接口,BeanFactory的常用实现类是Default ...

  3. 动态规划——稀疏表求解RMQ问题

    RMQ (Range Minimum/Maximum Query)问题,即区间最值查询问题,是求解序列中的某一段的最值的问题.如果只需要询问一次,那遍历枚举(复杂度O(n))就是最方便且高效的方法,但 ...

  4. k3 cloud库存管理中的直接调拨单权限分配出现问题

    k3 cloud中给直接调拨单分配了对应的权限,但是客户端无法查看到对应的单据 解决办法: 是应为没有发布到对应的客户端和浏览器端,打开bos,找到对应的单据并点击发布,找到对应的目录,如图所示: 把 ...

  5. 如何处理HTML5新标签的浏览器兼容性问题?

    ① IE8/IE7/IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签 ② 也可以使用成熟的框架 ex:html5shim &l ...

  6. VS code 生成html模板快捷键

    第一步:在空html文档中输入   ! 第二步:按下tab键.

  7. 关于vuex中的状态变量的思考???

    store中存取的为整个项目的公共变量,通过设置mutation来改变他们 假设现有如下代码: const store = new Vuex.Store({ state: { userInfo:{ n ...

  8. elasticsearch 进行聚合+去重查询

    转载:https://www.jianshu.com/p/c03c3c8bf583 以客户customer为例 我想查询每日的客户数. 先按照日期分桶,然后在桶内按照 姓名来去重 来计算客户数(实际会 ...

  9. Java Web入门二

    Web应用服务器 供向外发布web资源的服务器软件. Web资源 存在于Web服务器可供外界访问的资源就是web资源.例如:存在于web服务器内部的Html.CSS.js.图片.视频等. 静态资源 w ...

  10. Autoit 3 常用的语句

    {系统环境变量} EnvUpdate ( ) ;更新环境变量 EnvGet ( "变量名称" ) ;取环境变量 ClipGet ( ) ;取剪辑板文本 EnvSet ( " ...