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>>的更多相关文章

  1. Mybatis 遍历 List<Map<String,Object>>

    在上一篇博客中总结了MyBatis Plus 实现多表分页模糊查询(链接在最后).返回类型是编写一个专门的vo类.这次是返回List < Map > 前言 ​ 编写一个专门的vo返回类,主 ...

  2. 使用java自带的xml解析器解析xml

    使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的ha ...

  3. JavaScript使用浏览器内置XML解析器解析DOM对象

    所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 (可通过 JavaScript 操作的对象). 一.获取DOM对象 XMLHttpReq ...

  4. HandlerMethodReturnValueHandler SpringMVC 参数解析 继承关系以及各解析器解析类型

    I HandlerMethodReturnValueHandler (org.springframework.web.method.support) AbstractMessageConverterM ...

  5. HandlerMethodArgumentResolver SpringMVC 参数解析 继承关系以及各解析器解析类型

    HandlerMethodArgumentResolver SpringMVC 参数解析 继承关系以及各解析器解析类型 I HandlerMethodArgumentResolver (org.spr ...

  6. Java DOM解析器 - 解析XML文档

    使用DOM的步骤 以下是在使用DOM解析器解析文档使用的步骤. 导入XML相关的软件包. 创建DocumentBuilder 从文件或流创建一个文档 提取根元素 检查属性 检查子元素 导入XML相关的 ...

  7. 用第三方工具类,将JavaBean、List、Map<String,Object>转成JSON文本

    导入第三方jar包: >commons-beanutils-1.7.0.jar >commons-collections-3.1.jar >commons-lang-2.5.jar ...

  8. 把List<Map<String,Object>>转成Map<String,Object>

    Map<String, Object> parmMap = new HashMap<String, Object>(); //定义一个用于存储强转后的Map List<M ...

  9. json遍历,List<Map<String,Object>>遍历

    js怎样给input对象追加属性,如disabled $(":textbox").attr({"disabled":true}); List<Map< ...

  10. List<Map<String, Object>>取值

    List<Map<String, Object>> postlist //一个list里面装着多个map,如下 [ {A=0100, B=4}, {A=0200, B=3}, ...

随机推荐

  1. linux压缩文件并排除指定目录

    今天要在linux上打包一个项目另作他用,但是项目图片都是放本地服务器的,整个项目打包好后有2G多下载十分费时.项目中的图片我们可以不要,所以压缩的时候要排除图片目录. 具体命令如下: // 参数说明 ...

  2. Kali 获取任意设备信息

    注意:仅供测试 请勿商用 可获取对方位置 误差小于500m 访问摄像头 访问麦克风 一. 安装环境 #01 mac 安装虚拟机 下载地址:https://www.macyy.cn/archives/1 ...

  3. 用Python编写自己的微型Redis

    building-a-simple-redis-server-with-python 前几天我想到,写一个简单的东西会很整洁 雷迪斯-像数据库服务器.虽然我有很多 WSGI应用程序的经验,数据库服务器 ...

  4. aardio 嵌入 其他应用程序

    aardio 嵌入 其他应用程序 需求 这个chrome壳不能进行拖拽和缩放,所以再套一个壳,可以再分屏的时候用 import win.ui; /*DSG{{*/ winform = win.form ...

  5. 数据湖-Hudi/IceBerg

  6. WPF之命令

    目录 命令系统的基本元素 基本元素之间的关系 小试命令 WPF的命令库 命令参数 命令与Binding的结合 近观命令 ICommand接口与RoutedCommand 自定义Command 定义命令 ...

  7. k8s创建Pod的流程

    Kubernetes(k8s)中Pod的创建过程是一个涉及多个组件协作的复杂流程,下面将详细描述这个过程,确保内容的详尽性和深度. 一.用户提交创建请求 Pod的创建始于用户通过kubectl命令行工 ...

  8. 【开源库推荐】#2 AndroidUtilCode Android常用工具类大全(附API使用说明)

    Blankj/AndroidUtilCode: Android developers should collect the following utils(updating). Download Gr ...

  9. 瑞云与宜宾职院开展校企合作,同深圳VR联合会共建元宇宙产业学院

    2022年7月9日,宜宾职业技术学院携手深圳市虚拟现实产业联合会和深圳市瑞云科技有限公司,合作共建的"元宇宙职业教育研究与应用中心"."元宇宙产业学院"授牌仪式 ...

  10. 鸿蒙HarmonyOS实战-ArkUI组件(Row/Column)

    前言 HarmonyOS的布局组件是一组用于构建用户界面布局的组件,包括线性布局.相对布局.网格布局等.这些组件帮助开发者以简单和灵活的方式管理和组织应用程序中的视图,并支持多种不同的设备屏幕尺寸和方 ...