使用 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 ...
随机推荐
- Git 团队常用命令操作指南
命令如下: git clone -b <branch name> [remote repository address] 主要就是在clone的时候,后面添加branch的信息. 报错: ...
- Android studio 配置忽略
直接在Ignored Files选项里点击+号,在弹出的对话框选择第二项,然后依次输入上面包含的 .gradle .idea build 三个文件夹目录,再选择第一项,找到local.properti ...
- 跨平台移动开发phonegap/cordova 3.3全系列教程-简介
一. 跨平台實現架構: phonegap +asp.net+jquery mobile/jqmobi 二. PhoneGap简介 PhoneGap是一个开源的开发框架,用来构建跨平台的使用HT ...
- Array负载均衡控制器(vAPV)
平台: freebsd 类型: 虚拟机镜像 软件包: apache python basic software load balance network infrastructure slb ssl ...
- C++ vector常用法
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<in ...
- 将腾讯视频客户端缓冲的文件转换为一个MP4格式文件
打开腾讯视频windows客户端,播放要下载的视频,逐步快进使其缓冲完毕: 按照下图所示,复制缓存路径: 在cmd.exe的界面中输入“cd C:\854456b6d5a187ff3c0f553918 ...
- Ubuntu 16.04 开启休眠功能
因为休眠功能在部分计算机无法正常工作,所以Ubuntu默认是不开启休眠功能. 要想开启休眠功能先进行如下测试: 1.先检查是否有交换分区(swap),如果有确认交换分区至少和实际可用内存一样大. 2. ...
- 项目开发中dev、test和prod是什么意思
开发环境(dev):开发环境是程序猿们专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部错误报告. 测试环境(test):一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常 ...
- 树莓派(raspberry pi)更改键盘布局
http://blog.csdn.net/c80486/article/details/8460271 树莓派(raspberry pi)用了几次后,发现键盘老是按错,一些字符打不出来或打错 这个问题 ...
- java基础编程——二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...