网上找不到一个能用的工具类,于是决定自己动手丰衣足食
欢迎吐槽不足之处
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<String, ?> map) {
if (null == map) {
return;
}
for (Map.Entry<String, ?> en : map.entrySet()) {
if (null == en.getValue()) {
continue;
}
if (en.getValue() instanceof Map) {
Element element = root.addElement(en.getKey());
MapToElement(element, (Map<String, ?>) en.getValue());
} else if (en.getValue() instanceof List) {
List<?> value = (List<?>) en.getValue();
for (Object obj : value) {
Element element = root.addElement(en.getKey());
if (obj instanceof Map) {
MapToElement(element, (Map<String, ?>) 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("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
+ "<books><book><k>k1</k><k>k2</k></book><book>2</book></books>");
Map<String, ?> 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<String, ?> DomToMap(Document document) {
Element rootElement = document.getRootElement();
Map<String, Object> map = new HashMap();
ElementToMap(rootElement, map);
return map;
}/**
* 递归调用
* @param element
* @param map
* @return
*/
private static Object ElementToMap(Element element, Map<String, Object> map) {
List<Element> elements = element.elements();
if (elements.size() == 0) {
if (null != map) {
map.put(element.getName(), element.getTextTrim());
}
return element.getTextTrim();
} else {
Map<String, Object> 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;
}
}
}