用dom4j做的xml和Java的Map互转

网上找不到一个能用的工具类,于是决定自己动手丰衣足食
【用dom4j做的xml和Java的Map互转】欢迎吐槽不足之处

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/**
* 功能:XML解析工具类
*
* @author wangfan sunssnew@163.com @date 2019年3月8日
*
*/
public class XMLTools {
/**
* map 转 XML Document
*
* @param map
*map的key是xml的标签<>名,val是标签下的内容
* @param rootName
*根节点标签名
* @return
*/
public static Document MapToDom(Map map, String rootName) {
Document document = DocumentHelper.createDocument();
Element root = document.addElement(rootName);
MapToElement(root, map);
return document;
}
/**
* map 转 XML Element map的key是xml的标签<>名,val是标签下的内容
*
* @param map
* @return
*/
private static void MapToElement(Element root, Map map) {
if (null == map) {
return;
}
for (Map.Entry en : map.entrySet()) {
if (null == en.getValue()) {
continue;
}
if (en.getValue() instanceof Map) {
Element element = root.addElement(en.getKey());
MapToElement(element, (Map) en.getValue());
} else if (en.getValue() instanceof List) {
List value = https://www.it610.com/article/(List) en.getValue();
for (Object obj : value) {
Element element = root.addElement(en.getKey());
if (obj instanceof Map) {
MapToElement(element, (Map) obj);
} else {
element.add(DocumentHelper.createCDATA(obj.toString()));
}
}
} else {
Element element = root.addElement(en.getKey());
element.add(DocumentHelper.createCDATA(en.getValue().toString()));
}
}
return;
}
public static void main(String[] args) throws Exception {
Document document = DocumentHelper.parseText("\r\n"
+ "k1k22");
Map domToMap = DomToMap(document);
System.out.println("-" + domToMap);
Document mapToDom = MapToDom(domToMap, "aa");
System.out.println("-" + mapToDom.asXML());
}
/**
* document 转 Map
* @param document
* @return
*/
public static Map DomToMap(Document document) {
Element rootElement = document.getRootElement();
Map map = new HashMap();
ElementToMap(rootElement, map);
return map;
}
/**
* 递归调用
* @param element
* @param map
* @return
*/
private static Object ElementToMap(Element element, Map map) {
List elements = element.elements();
if (elements.size() == 0) {
if (null != map) {
map.put(element.getName(), element.getTextTrim());
}
return element.getTextTrim();
} else {
Map map2 = new HashMap();
if (null != map) {
map.put(element.getName(), map2);
}
String repetitionName = "";
for (Element element2 : elements) {
if (repetitionName.equals(element2.getName())) {
// 第二次以上 包含这个key了 直接添加到List
List list = (List) map2.get(repetitionName);
list.add(ElementToMap(element2, null));
} else if (map2.containsKey(element2.getName())) {
// 第二次 包含这个key了需要改成List
repetitionName = element2.getName();
Object remove = map2.remove(repetitionName);
List list = new ArrayList();
list.add(remove);
list.add(ElementToMap(element2, null));
map2.put(element2.getName(), list);
} else {
// 没有这个key
ElementToMap(element2, map2);
}
}
return map2;
}
}
}

    推荐阅读