使用 Dom4j 将 XML 转换为 MAP
本文为转载: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的更多相关文章
- XML转换为Map通用算法实现 Java版本(Stax实现)
目前项目中需要将XML转换为Map,下面给出了自己的代码实现. 后续将为大家提供Dom版本的实现. 请各路大神给予各种优良实现. 场景: 在项目中需要解析XML文本字符串,需要将XML文本字符串映射为 ...
- xml转Map,对象,Map转xml,inputs tram 转xml 字符串的工具类方法
众所周知,大家在微信开发工程中,由于微信开发文档中,对于消息的接收发送都是基础xml数据的(太坑了),所以我们需要对XML进行解析转换: 1.我们先引入所需要的依赖 dom4j (解析xml的),xs ...
- Java的xml与map,与Bean互转
xml与map互转,主要使用dom4j import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j. ...
- Xml与Map之间的相互转换
一.(单层)xml转换为map /** * XML格式字符串转换为Map * * @param xml XML字符串 * @return XML数据转换后的Map * @throws Exceptio ...
- Dom4j把xml转换成Map(固定格式)
/** * 可解析list * * @param fileName * @return * @throws Exception */ @SuppressWarnings("unchecked ...
- 【dom4j】解析xml为map
dom4j解析xml文件 <?xml version="1.0" encoding="utf-8"?> <workflows> < ...
- xml 转map dom4j
http://ziyu-1.iteye.com/blog/469003 传过来一个xml文件,需要转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml. 转换规则: 1.主要是Map与 ...
- dom4j组装xml 以及解析xml
dom4j组装xml 以及解析xml: 1.下载dom4j的jar包,地址:https://dom4j.github.io/ 2.java代码: package test; import java.i ...
- XML解析与xml和Map集合的互转
1.XML的解析.首先解析XML文件我们需要先获取到文件的存放路径,获取方法有三种分别获取xml文件不同的存放路径. 代码: public class PropertiesDemo { public ...
随机推荐
- Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单
如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...
- Cocos2d-x v3.1 Hello world程序(四)
Cocos2d-x v3.1 Hello world程序(四) 在上一篇文章中我们我们已经使用Cocos-Console工具生成了工程,本机生成的目录为:"D:\CocosProject\T ...
- SQL Server DBA SQL
. 监控事例的等待 ,,)) "Prev", ,,)) "Curr",count(*) "Tot" from v$session_Wait ...
- spring中用xml配置构造注入的心得
spring中用xml配置构造注入时,如果 <constructor-arg> 属性都是 ref ,则不用理会参数顺序 <constructor-arg ref="kill ...
- IOS - (id)initWithStyle... 方法的使用
// 该方法只有在通过代码创建控件的时候才会调用, 如果控件是通过xib或者storyboard创建出来的不会调用该方法- (id)initWithStyle:(UITableViewCellStyl ...
- WQS二分学习笔记
前言 \(WQS\)二分听起来是个很难的算法,其实学起来也并不是那么难. 适用范围 在某些题目中,会对于某个取得越多越优的物品,限定你最多选择\(k\)个,问你能得到的最优答案. 例如这道题目:[CF ...
- 回归树的原理及Python实现
大名鼎鼎的 GBDT 算法就是用回归树组合而成的.本文就回归树的基本原理进行讲解,并手把手.肩并肩地带您实现这一算法. 1. 原理篇 1.1 最简单的模型 如果预测某个连续变量的大小,最简单的模型之一 ...
- 使用pip 提示UnicodeDecodeError: 'ascii' codec can't decode解决方法
python目录 Python27\Lib\site-packages 建一个文件sitecustomize.py 内容写: import sys sys.setdefaultencoding('gb ...
- java基础——类加载与反射
第1章 类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. (1)加载 就是指将class文件读入内存,并为之创 ...
- C# sizeof运算符
一.C# sizeof运算符 sizeof运算符用于获取值类型的字节数. 二.示例 using System;using System.Collections.Generic;using System ...