本文为转载: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. python起源,变量,用户交互,流程语句

    1.Python的起源 Python是一门解释型弱类型编程语言. 特点:简单.明确.优雅 2.Python解释器 CPython官方提供的, 内部使用C语言来实现 PyPy,一次性把我们的代码解释成字 ...

  2. Regexp:常用的几个正则表达式

    1.isEmail /** * * @desc 判断是否为邮箱地址 * @param {String} str * @return {Boolean} */ function isEmail(str) ...

  3. 基于python3.6的如何爬取百度地图

    先前参考了其他的代码,大多数是python2.7写的,而3.6用的类库以及规则有了很大的变动,所以自己写了一个这样的代码,供给大家参考. def get_station(i): station=[] ...

  4. echo -e的用法

    root@bt:~# echo -e "HEAD /HTTP/1.0\n\n"HEAD /HTTP/1.0 root@bt:~# echo -e "HEAD /HTTP/ ...

  5. 红象云腾CRH 一键部署大数据平台

    平台: arm 类型: ARM 模板 软件包: azkaban hadoop 2.6 hbase hive kafka spark zeppelin azkaban basic software bi ...

  6. ubuntu常见错误

    ubuntu常见错误--Could not get lock /var/lib/dpkg/lock解决 ubuntu常见错误--Could not get lock /var/lib/dpkg/loc ...

  7. 2018.6.5 Oracle plsql编程 游标的使用

    --3.查询10部门所有员工的姓名.(ref游标实现) 动态游标 declare --创建一种游标类型 type type_cursor is ref cursor; --声明变量指定游标类型 v_c ...

  8. 漫谈Ajax在.Net中的使用

    引用地址:http://birdshover.cnblogs.com/archive/2006/07/03/441439.html AJAX出来的时间也不短了.虽然它在某些方面很受争议,但是瑕不掩瑜. ...

  9. java 代码优化

    Java程序中的内存管理机制是通过GC完成的,“一个对象创建后被放置在JVM的堆内存中,当永远不在应用这个对象的时候将会被JVM在堆内存中回收.被创建的对象不能再生,同时也没有办法通过程序语句释放”( ...

  10. macbook pro开机键盘键盘和触摸板没反应问题

    今天遇到开机键盘和触摸板没反应的问题,打电话给售后,他叫我插一个usb外置键盘,开机时按shift+alt+control+电源键开机,突然发现可以了,这bug我也是醉了