本文为转载:http://blog.sina.com.cn/s/blog_6145ed810100z164.html  原文地址。

自己仅作备忘录方便查找留了一份。

这是解析Xml 的辅助类

 package com.zwr.www.util;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import org.dom4j.Document;
import org.dom4j.Element; public class XmlUtil {
@SuppressWarnings({ "rawtypes" })
public static Map<String, Object> Dom2Map(Document doc) {
Map<String, Object> map = new HashMap<String, Object>();
if (doc == null)
return map;
Element root = doc.getRootElement();
for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {
Element e = (Element) iterator.next();
List list = e.elements();
if (list.size() > 0) {
map.put(e.getName(), Dom2Map(e));
} else
map.put(e.getName(), e.getText());
}
return map;
} @SuppressWarnings({ "unchecked", "rawtypes" })
public static Map Dom2Map(Element e) {
Map map = new HashMap();
List list = e.elements();
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Element iter = (Element) list.get(i);
List mapList = new ArrayList(); if (iter.elements().size() > 0) {
Map m = Dom2Map(iter);
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!obj.getClass().getName()
.equals("java.util.ArrayList")) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(m);
}
if (obj.getClass().getName()
.equals("java.util.ArrayList")) {
mapList = (List) obj;
mapList.add(m);
}
map.put(iter.getName(), mapList);
} else
map.put(iter.getName(), m);
} else {
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!obj.getClass().getName()
.equals("java.util.ArrayList")) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(iter.getText());
}
if (obj.getClass().getName()
.equals("java.util.ArrayList")) {
mapList = (List) obj;
mapList.add(iter.getText());
}
map.put(iter.getName(), mapList);
} else
map.put(iter.getName(), iter.getText());
}
}
} else
map.put(e.getName(), e.getText());
return map;
}
}

下面是测试类

 package com.zwr.www.test;

 import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Map; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper; import com.zwr.www.util.XmlUtil; public class XmlToMapTest {
public static void main(String[] args) throws DocumentException, IOException {
FileInputStream fis = new FileInputStream("bin/message.xml");
byte[] b = new byte[fis.available()];
fis.read(b);
String str = new String(b);
Document doc = DocumentHelper.parseText(str);
System.out.println(doc.asXML());
long beginTime = System.currentTimeMillis();
Map<String, Object> map = XmlUtil.Dom2Map(doc);
System.out.println(map.toString());
System.out.println("Use time:" + (System.currentTimeMillis() - beginTime));
}
}

下面是测试用的xml文件

 <message>
<head>
<trade_time>2014-11-12 05:04:05</trade_time>
<trade_type>R1000002</trade_type>
<content_lenge>1</content_lenge>
<content_trans_type>0</content_trans_type>
<check_code></check_code>
</head>
<body class="authorzation">
<batch_no>20141105112233</batch_no>
<authorzation_list>
<p13>
<p13_no>c_xiaoming-001</p13_no>
<followAcc_list>
<followacc>
<follow_acc>xiaoliu1</follow_acc>
<branch_org_code>9000000000001</branch_org_code>
<company>520000123</company>
<aci_list>
<aci>
<aci_no>1001</aci_no>
<scope_list>
<scope>
<scope_no>a0001</scope_no>
<scope_type>TXT</scope_type>
<scope_value_list>
<scope_value>
<min_value>abc</min_value>
<max_value></max_value>
</scope_value>
<scope_value>
<min_value>abc</min_value>
<max_value>123</max_value>
</scope_value>
</scope_value_list>
</scope>
<scope>
<scope_no>a0002</scope_no>
<scope_type>TXT</scope_type>
<scope_value_list>
<scope_value>
<min_value>abc</min_value>
<max_value>123</max_value>
</scope_value>
</scope_value_list>
</scope>
</scope_list>
<opertion_type>1</opertion_type>
</aci>
</aci_list>
</followacc>
</followAcc_list>
</p13> <p13>
<p13_no>c_xiaoming-002</p13_no>
<followAcc_list>
<followacc>
<follow_acc>xiaoliu2</follow_acc>
<branch_org_code>9000000000001</branch_org_code>
<company>520000123</company>
<aci_list>
<aci>
<aci_no>1002</aci_no>
<scope_list>
<scope>
<scope_no>a0001</scope_no>
<scope_type>TXT</scope_type>
<scope_value_list>
<scope_value>
<min_value>abc</min_value>
<max_value></max_value>
</scope_value>
<scope_value>
<min_value>abc</min_value>
<max_value>123</max_value>
</scope_value>
</scope_value_list>
</scope>
<scope>
<scope_no>a0002</scope_no>
<scope_type>TXT</scope_type>
<scope_value_list>
<scope_value>
<min_value>abc</min_value>
<max_value>123</max_value>
</scope_value>
</scope_value_list>
</scope>
</scope_list>
<opertion_type>1</opertion_type>
</aci>
</aci_list>
</followacc>
</followAcc_list>
</p13> </authorzation_list>
</body>
</message>

在此感谢 郑君华 

使用 Dom4j 将 XML 转换为 MAP的更多相关文章

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

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

  2. xml转Map,对象,Map转xml,inputs tram 转xml 字符串的工具类方法

    众所周知,大家在微信开发工程中,由于微信开发文档中,对于消息的接收发送都是基础xml数据的(太坑了),所以我们需要对XML进行解析转换: 1.我们先引入所需要的依赖 dom4j (解析xml的),xs ...

  3. Java的xml与map,与Bean互转

    xml与map互转,主要使用dom4j import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j. ...

  4. Xml与Map之间的相互转换

    一.(单层)xml转换为map /** * XML格式字符串转换为Map * * @param xml XML字符串 * @return XML数据转换后的Map * @throws Exceptio ...

  5. Dom4j把xml转换成Map(固定格式)

    /** * 可解析list * * @param fileName * @return * @throws Exception */ @SuppressWarnings("unchecked ...

  6. 【dom4j】解析xml为map

    dom4j解析xml文件 <?xml version="1.0" encoding="utf-8"?> <workflows> < ...

  7. xml 转map dom4j

    http://ziyu-1.iteye.com/blog/469003 传过来一个xml文件,需要转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml. 转换规则: 1.主要是Map与 ...

  8. dom4j组装xml 以及解析xml

    dom4j组装xml 以及解析xml: 1.下载dom4j的jar包,地址:https://dom4j.github.io/ 2.java代码: package test; import java.i ...

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

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

随机推荐

  1. concurrent.futures模块与协程

    concurrent.futures  —Launching parallel tasks    concurrent.futures模块同时提供了进程池和线程池,它是将来的使用趋势,同样我们之前学习 ...

  2. jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别讲解

    1.(function($){...})(jQuery); (1).原理:       这实际上是匿名函数,如下: function(arg){...} 这就定义了一个匿名函数,参数为arg:而调用函 ...

  3. ubuntu 16.04安装nVidia显卡驱动和cuda/cudnn踩坑过程

    安装深度学习框架需要使用cuda/cudnn(GPU)来加速计算,而安装cuda/cudnn,首先需要安装nvidia的显卡驱动. 我在安装的整个过程中碰到了驱动冲突,循环登录两个问题,以至于最后不得 ...

  4. ArcMap中提取影像数据边界

    1.前言 客户手里有一些经过裁剪的不规则多边形影像数据(如图例所示),希望能批量获取该类影像的边界信息,即影像对应的面信息,边界线信息.这里我们提供一种利用镶嵌数据集Footprint图层的方法来获取 ...

  5. System Center Configuration Manager 2016 必要条件准备篇(Part1)

    步骤4.创建系统管理容器 SCCM 2016 配置管理系列(Part 1- 4) 介绍AD01上配置了Active Directory域服务(ADDS),然后将Configuration Manag ...

  6. Hyper-V 2016 配置管理系列(部署篇)

    Hyper主机前提准备以后,我们开始Hyper-V Cluster 群集配置 准备验证Cluster 群集 : 1)打开群集管理器,点击"validate Configuration&quo ...

  7. VS打包方法(安装和部署简介)——内含大量图片,密症慎入!

    友情提示:内含大量文字.图片,密集恐惧症者慎入! 主要记述一下利用微软集成开发环境VS打包的方法和详细步骤. 1.新建打包工程 打开VS,文件->添加项目->新建项目(如图1),在添加新项 ...

  8. 【BZOJ3930】[CQOI2015] 选数(容斥)

    点此看题面 大致题意: 让你求出在区间\([L,H]\)间选择\(n\)个数时,有多少种方案使其\(gcd\)为\(K\). 容斥 原以为是一道可怕的莫比乌斯反演题. 但是,数据范围中有这样一句话:\ ...

  9. python 多进程简单调用

    python 多进程简 #!/usr/bin/env python #-*- coding:utf-8 -*- # author:leo # datetime:2019/5/28 10:03 # so ...

  10. InstallShield Limited Edition for Visual Studio 2013 图文教程打包安装包

    http://www.wuleba.com/23892.html 从Visual Studio 2012开始,微软就把自家原来的安装与部署工具彻底废掉了,转而让大家去安装使用第三方的打包工具“Inst ...