本文为转载: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. linux 跳过登陆修改用户密码

      2017-02-11 20:41 6人阅读 评论(0) 收藏 编辑 删除  分类: Linux 版权声明:本文为博主原创文章,未经博主允许不得转载. Linux 系统默认的是有0 1 2  3   ...

  2. BZOJ3624: [Apio2008]免费道路(最小生成树)

    题意 题目链接 Sol 首先答案一定是一棵树 这棵树上有一些0边是必须要选的,我们先把他们找出来,如果数量$\geqslant k$显然无解 再考虑继续往里面加0的边,判断能否加到k条即可 具体做法是 ...

  3. oracle中查找与已知表的数据库对象

    在此次情况中,业务顾问就给我提供了一张客户公司客户化的Form,然后让找出界面上的数据是怎样生成的. 首先我们从EBS form 界面上找到了界面的数据来源于一张表ks_so_line_margin_ ...

  4. 腾讯云服务器手动和自动安装WordPress网站程序

    如果我们需要建站的话,对于基础个人网站.博客建站选择基础的1Mbps带宽配置的1GB内存的腾讯云服务器还是够用的,且如果我们需要用来建网站的话可以手工添加程序,以及有些面板,比如宝塔面板是自带CMS程 ...

  5. C++ vector容器类型的用法及注意

    转自http://www.cnblogs.com/charley_yang/archive/2010/12/11/1903040.html vector类为内置数组提供了一种替代表示,与string类 ...

  6. C,通信,多线程,数据库小练习——在线电子词典第一版

    #ifndef FILE_H #define FILE_H #include<stdio.h> #include<sys/types.h> #include<sys/so ...

  7. Extjs4.1+desktop+SSH2 定义程序入口

    app.js定义程序入口: MainController.js: 加载控制器: 外部组件引用入口loader.js 时间组件 静态变量组件: 引入comm.js index.jsp 验证打印 comm ...

  8. JSP开发过程遇到的中文乱码问题及解决方案

    对于程序猿来说,乱码问题真的很头疼,下面列举几种常见的乱码. 1.数据库编码不一致导致乱码 解决方法: 首先查看数据库编码,输入: show variables like "%char%&q ...

  9. 利用kvo实现列表倒计时

    自己稍微记录一下,方便以后用到: 先创建一个定时器的类: #import "TimeCenter.h" @interface TimeCenter () @property (no ...

  10. 如何让图片相对于上层DIV始终保持水平、垂直都居中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...