dom4j 通用解析器,解析成List<Map<String,Object>>
import java.io.InputStream;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; public class Dom4JXmlConvert { /**
* dom4j解析xml
*
* @param in
* @return
*/
@SuppressWarnings("unchecked")
public static List<Map<String, Object>> convert(InputStream in) {
long start = System.currentTimeMillis();
List<Map<String, Object>> lst = new LinkedList<>();
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(in);
// 获取根节点
Element root = document.getRootElement();
// 迭代根节点下的所有子节点
Iterator<Element> itertor = root.elementIterator();
Element eleNext = null;
// 遍历子节点
while (itertor.hasNext()) {
eleNext = itertor.next();
Map<String, Object> tmp = parseElement(eleNext);
lst.add(tmp);
}
System.out.println("本次解析XML耗时:" + (System.currentTimeMillis() - start));
} catch (DocumentException e) {
e.printStackTrace();
}
return lst;
} @SuppressWarnings({ "unchecked" })
private static Map<String, Object> parseElement(Element ele) {
Map<String, Object> map = new LinkedHashMap<String, Object>(); // 遍历节点属性
Iterator<Attribute> iterAttr = ele.attributeIterator(); // 遍历时的中间遍量
Attribute attr = null; // 遍历
while (iterAttr.hasNext()) {
attr = iterAttr.next();
map.put(attr.getQName().getName(), attr.getValue());
} // 如果该节点没有子节点,则添加标签名和标签中间的字符到map,如果还有子节点,递归遍历
Iterator<Element> itertor = ele.elementIterator();
if (!itertor.hasNext()) {
map.put(ele.getName(), ele.getStringValue());
} else {
List<Map<String, Object>> lst = new LinkedList<>();
while (itertor.hasNext()) {
lst.add(parseElement(itertor.next()));
}
map.put(ele.getName(), lst);
}
return map;
}
}
测试解析spring的配置文件,自定义文件,均可正常解析
dom4j 通用解析器,解析成List<Map<String,Object>>的更多相关文章
- Mybatis 遍历 List<Map<String,Object>>
在上一篇博客中总结了MyBatis Plus 实现多表分页模糊查询(链接在最后).返回类型是编写一个专门的vo类.这次是返回List < Map > 前言 编写一个专门的vo返回类,主 ...
- 使用java自带的xml解析器解析xml
使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的ha ...
- JavaScript使用浏览器内置XML解析器解析DOM对象
所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 (可通过 JavaScript 操作的对象). 一.获取DOM对象 XMLHttpReq ...
- HandlerMethodReturnValueHandler SpringMVC 参数解析 继承关系以及各解析器解析类型
I HandlerMethodReturnValueHandler (org.springframework.web.method.support) AbstractMessageConverterM ...
- HandlerMethodArgumentResolver SpringMVC 参数解析 继承关系以及各解析器解析类型
HandlerMethodArgumentResolver SpringMVC 参数解析 继承关系以及各解析器解析类型 I HandlerMethodArgumentResolver (org.spr ...
- Java DOM解析器 - 解析XML文档
使用DOM的步骤 以下是在使用DOM解析器解析文档使用的步骤. 导入XML相关的软件包. 创建DocumentBuilder 从文件或流创建一个文档 提取根元素 检查属性 检查子元素 导入XML相关的 ...
- 用第三方工具类,将JavaBean、List、Map<String,Object>转成JSON文本
导入第三方jar包: >commons-beanutils-1.7.0.jar >commons-collections-3.1.jar >commons-lang-2.5.jar ...
- 把List<Map<String,Object>>转成Map<String,Object>
Map<String, Object> parmMap = new HashMap<String, Object>(); //定义一个用于存储强转后的Map List<M ...
- json遍历,List<Map<String,Object>>遍历
js怎样给input对象追加属性,如disabled $(":textbox").attr({"disabled":true}); List<Map< ...
- List<Map<String, Object>>取值
List<Map<String, Object>> postlist //一个list里面装着多个map,如下 [ {A=0100, B=4}, {A=0200, B=3}, ...
随机推荐
- Python面向对象之面向对象编程
[一]什么是面向过程 [1]面向过程介绍 面向过程,核心在于 "过程" 二字 过程的终极奥义就是将程序 "流程化" 过程是 "流水线" ,用 ...
- nginx Host值设置
$server_port :nigix监听的端口 $proxy_port : 服务器真正访问的端口 #设置请求头"Host"值(为入口域名和端口) proxy_set_header ...
- Zabbix6.0使用教程 (一)—zabbix新增功能介绍2
上一篇我们已经介绍了部分zabbix6.0的新增功能,这期我们将继续为家详细介绍下余下的zabbix6.0新增功能,大家可以往下看. 六.监控项 6.1 自动类型选择 监控项配置表单会自动建议匹配的信 ...
- 发那科数控机床FanucCNC(NCGuide)仿真模拟器配置和数据采集测试
开发日记3.12 此篇用于记录发那科数控机床(Fanuc CNC)采集程序开发中,用虚拟机做测试时,虚拟机的配置和使用以支持采集软件开发和测试. 配置虚拟机使用仿真软件 下载VMware15 「链接: ...
- aardio ide 字体 及设置
需求 aardio ide 只支持一个字体,英文字体肯定是Fira 但是中文字体不好,所以只好将两个字体合并上使用. 有教程.但是我发现已经有合并好的,就拿来使用吧放到fonts目录里面 代码 imp ...
- 一个简易的ORM框架的实现(一)
一个简易的ORM框架的实现 ORM ORM---操作数据库---对象关系映射 ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节.只要提供了持久化类与 ...
- 【jQuery】(8)---jquery Ajax
jquery ajax 一.AJAX 概述 1.什么是 AJAX? 特点 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使 ...
- 【leetcode 1799 N次操作后的最大分数和】状态压缩
回溯会超时,状态压缩 class Solution { public int maxScore(int[] nums) { int len = nums.length; int size = 1 &l ...
- koa2整合mysql
引入mysql包 npm install mysql 封装mysql 创建mysql.js文件放在utils(工具包)中 使用pool连接池 mysql.js //封装mysql const mysq ...
- 移动端弹性布局方案lib-flexible实践
2个月前,写过一篇文章<从网易与淘宝的font-size思考前端设计稿与工作流>总结过一些移动web中有关手机适配的一些思路,当时也是因为工作的关系分析了下网易跟淘宝的移动页面,最后才有那 ...