参考网上的例子,自己整理的工具类。通过dom4j解析xml后,将返回结果整理为List<Map<String, Object>数据结构。
每个节点包含:name、value、children、attribute等属性。
xml例子
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<action_info>
<username>张三</username>
</action_info>
<info>
<id>1</id>
<name>测试</name>
<db_name>db_test</db_name>
</info>
</root>
pom maven配置
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
Dom4jXmlUtils工具类
package com.common.core.utils;
import com.alibaba.fastjson.JSON;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.*;
/**
* description dom4j xml解析
*
* @Auther: liujianguang
* @Date: 2022/12/30 16
*/
public class Dom4jXmlUtils {
/**
* 递归读取children
*
* @param it 迭代器
* @return
* @throws Exception
*/
public static List<Map<String, Object>> loop(Iterator it) throws Exception {
List<Map<String, Object>> resDataList = new ArrayList<>();
// 遍历迭代器,获取根节点中的信息
while (it.hasNext()) {
Map<String, Object> dataMap = new HashMap<>();
Element element = (Element) it.next();
String childName = element.getName();
String childValue = element.getStringValue();
// 获取属性名以及属性值
List<Attribute> bookAttrs = element.attributes();
List<Map<String, Object>> attributeList = new ArrayList<>();
for (Attribute attr : bookAttrs) {
Map<String, Object> attributeMap = new HashMap<>();
attributeMap.put("name", attr.getName());
attributeMap.put("value", attr.getValue());
attributeList.add(attributeMap);
}
Iterator subIt = element.elementIterator();
if (subIt.hasNext()) {
dataMap.put("value", "");
dataMap.put("children", loop(subIt));
} else {
dataMap.put("value", childValue);
dataMap.put("children", new ArrayList<>());
}
dataMap.put("name", childName);
dataMap.put("attribute", attributeList);
resDataList.add(dataMap);
}
return resDataList;
}
/**
* 解析xml
*
* @param path xml路径
* @return
* @throws Exception
*/
public static List<Map<String, Object>> xmlParser(String path) throws Exception {
// 创建SAXReader的对象reader
SAXReader reader = new SAXReader();
// 通过reader对象的read方法加载.xml文件,获取docuemnt对象。
Document document = reader.read(new File(path));
// 通过document对象获取根节点
Element rootElement = document.getRootElement();
// 通过element对象的elementIterator方法获取迭代器
Iterator it = rootElement.elementIterator();
List<Map<String, Object>> resData = loop(it);
return resData;
}
public static void main(String[] args) throws Exception {
String path = "D:/temp/metadata.xml";
List<Map<String, Object>> data = xmlParser(path);
System.out.println(JSON.toJSONString(data));
}
}
到此xml解析完成。