package com.core.util;
import com.alibaba.druid.util.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.util.*;
public class CovertToXMLUtil {
//递归将Map转化为XML格式数据
public static String MapToXML(Map<Object, Object> sortedMap) {
StringBuilder builder = new StringBuilder();
Iterator iterator = sortedMap.keySet().iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
Object value = sortedMap.get(key);
builder.append("<" + key + ">");
if (value instanceof Map) {
Map sortedMap1 = (Map) value;
builder.append(MapToXML(sortedMap1));
} else {
builder.append(value);
}
builder.append("</" + key + ">");
}
return builder.toString();
}
//将XML转化为Map对象
public static Map XMLToMap(String xmlStr, boolean needRootKey) throws DocumentException {
org.dom4j.Document doc = DocumentHelper.parseText(xmlStr);
Element root = doc.getRootElement();
Map<String, Object> map = (Map<String, Object>) xml2map(root);
if(root.elements().size()==0 && root.attributes().size()==0){
return map;
}
if(needRootKey){
//在返回的map里加根节点键(如果需要)
Map<String, Object> rootMap = new HashMap<String, Object>();
rootMap.put(root.getName(), map);
return rootMap;
}
return map;
}
private static Map xml2map(Element e) {
Map map = new LinkedHashMap();
List list = e.elements();
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Element iter = (Element) list.get(i);
List mapList = new ArrayList();
if (iter.elements().size() > 0) {
Map m = xml2map(iter);
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!(obj instanceof List)) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(m);
}
if (obj instanceof List) {
mapList = (List) obj;
mapList.add(m);
}
map.put(iter.getName(), mapList);
} else
map.put(iter.getName(), m);
} else {
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!(obj instanceof List)) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(iter.getText());
}
if (obj instanceof List) {
mapList = (List) obj;
mapList.add(iter.getText());
}
map.put(iter.getName(), mapList);
} else
map.put(iter.getName(), iter.getText());
}
}
} else
map.put(e.getName(), e.getText());
return map;
}
}
java中XML,Map相互转换
最新推荐文章于 2022-02-25 10:58:50 发布
本文介绍了一个名为CovertToXMLUtil的Java类库,它提供了将Map对象递归转换为XML格式的方法,并能从XML字符串解析回Map。核心功能包括MapToXML和XMLToMap方法,适合处理复杂的数据结构转换。
摘要由CSDN通过智能技术生成