作用
转map
转json
转xml
需添加的依赖文件
<dependency>
<groupId></groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.15</version>
</dependency>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
package ;
import ;
import ;
import ;
import ;
import org.;
import org.;
import org.;
import org.;
import org.;
import org.;
import org.;
import ;
import ;
import ;
import ;
import ;
/**
* xml解析帮组类
* @author asen
* @date 2022/1/10 15:17
*/
public class XmlUtil {
/**
* 标签属性
*/
private final static String TAG_ATTR = "attr";
/**
* 创建的map类型
*/
private XmlSort xmlSort = XmlSort.NO_SORT;
/**
* map to xml
* @param map map对象
* @return xml 字符串
*/
public String mapToXml(Map<String,Object> map) {
if(() != 1){
throw new RuntimeException("map根节点长度不为1");
}
String key = "";
for (String str : ()) {
key = str ;
}
// 创建根节点
Element rootElement = new DefaultElement(key);
Document document = new DefaultDocument(rootElement);
Element node = ();
Object obj = (key);
// 断言
(,());
mapNodes(node,(Map<String, Object>)obj);
return ();
}
/**
* 父类节点已经创建, map 包含父类
* @param node node
* @param map map
*/
public void mapNodes(Element node, Map<String, Object> map) {
((k,v)->{
Object obj = (k);
// 给当前父类添加属性
if(TAG_ATTR.equals(k)){
(,());
Map<String,Object> tagMap = (Map<String,Object>) obj;
((tagKey,tagValue)->{
(tagKey, (String) tagValue);
});
return ;
}
if(obj instanceof Map){
Element newElement = (k);
// map 处理
Map<String,Object> childMap = (Map<String,Object>) obj;
mapNodes(newElement,childMap);
}else if (obj instanceof String){
Element newElement = (k);
((String) v);
} else if (obj instanceof List) {
List<Map<String, Object>> list = (List<Map<String, Object>>) obj;
(itemMap->{
Element newElement = (k);
mapNodes(newElement,itemMap);
});
}
});
}
/**
* 读取xml文件,返回json字符串
*
* @param fileName 文件路径
* @return json字符串
* @throws DocumentException 异常
*/
public String xmlToJson(String fileName) throws DocumentException {
Map<String, Object> xmlMap = xmlToMap(fileName);
return (xmlMap);
}
/**
* 读取xml文件,返回map对象
*
* @param fileName 文件路径
* @return map对象
* @throws DocumentException 异常
*/
public Map<String, Object> xmlToMap(String fileName) throws DocumentException {
// 创建saxReader对象
SAXReader reader = new SAXReader();
// 通过read方法读取一个文件 转换成Document对象
Document document = (new File(fileName));
//获取根节点元素对象
Element node = ();
//遍历所有的元素节点
Map<String, Object> map = getNewMap();
// 处理节点
listNodes(node, map);
return map;
}
/**
* 遍历当前节点元素下面的所有(元素的)子节点
*
* @param node node
*/
public void listNodes(Element node, Map<String, Object> map) {
Map<String, Object> xiaoMap = getNewMap();
String nodeKey = ();
// 获取当前节点的所有属性节点
List<Attribute> list = ();
// 遍历属性节点
Map<String, Object> attrMap = getNewMap();
for (Attribute attr : list) {
((), ());
}
if ((attrMap)) {
(TAG_ATTR, attrMap);
}
// 当前节点下面子节点迭代器
Iterator<Element> it = ();
if (!("".equals(())) || !()) {
(nodeKey, ());
}else{
// 不为空
if (((nodeKey))) {
(nodeKey, xiaoMap);
} else {
List<Map<String, Object>> childList = null;
// 获取原来的
Object obj = (nodeKey);
if (obj instanceof Iterable) {
// 非第一个
childList = (List<Map<String, Object>>) obj;
(xiaoMap);
} else if (obj instanceof Map) {
// 第一个
Map<String, Object> childMap = (Map<String, Object>) obj;
childList = new ArrayList<>();
(childMap);
(xiaoMap);
}
// 添加新的
(nodeKey, childList);
}
}
// 遍历
while (()) {
// 获取某个子节点对象
Element e = ();
// 对子节点进行遍历
listNodes(e, xiaoMap);
}
}
/**
* 获取一个新的map对象
*
* @return map对象
*/
private Map<String, Object> getNewMap() {
Object obj = null;
try {
obj = ().newInstance();
if (obj instanceof Map) {
return (Map<String, Object>) obj;
}
} catch (InstantiationException | IllegalAccessException e) {
();
}
return null;
}
/**
* 设置是否排序
*
* @param xmlSort 是否排序对象
*/
public void setXmlSort(XmlSort xmlSort) {
= xmlSort;
}
}
import ;
import ;
/**
* xml解析顺序是否有序
* @author ASen
*/
public enum XmlSort{
/**
* 有序
*/
SORT(,"有序"),
/**
* 无序
*/
NO_SORT(,"无序");
/**
* 创建的map字节码对象
*/
private final Class<?> mapClass;
/**
* 顺序名称
*/
private final String message ;
XmlSort(Class<?> mapClass, String message) {
= mapClass;
= message;
}
public Class<?> getMapClass() {
return mapClass;
}
public String getMessage() {
return message;
}
}