public class XmlMapUtil {
public static String map2xml(Map<String, Object> map, String rootElement) {
StringBuffer xmlStr = new StringBuffer("");
if (map == null || map.isEmpty())
return xmlStr.toString();
xmlStr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><" + rootElement + ">");
map2Element(map, xmlStr,new HashMap<String,String>());
xmlStr.append("</" + rootElement + ">");
return xmlStr.toString();
}
public static String map2xmlZz(Map<String, Object> map, String rootElement) {
StringBuffer xmlStr = new StringBuffer("");
if (map == null || map.isEmpty())
return xmlStr.toString();
xmlStr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><" + rootElement + ">");
map2ElementZz(map, xmlStr,new HashMap<String,String>());
xmlStr.append("</" + rootElement + ">");
return xmlStr.toString();
}
public static String map2xml(Map<String, Object> map, String rootElement,String mappingStr) {
Map<String,String>mappingRelation = new HashMap<>();
if( mappingStr!=null&&mappingStr.length()>0 ){
String[] mappingStrs = mappingStr.split(",");
for (String mapping : mappingStrs) {
mappingRelation.put(mapping.toLowerCase(), mapping);
}
}
StringBuffer xmlStr = new StringBuffer("");
if (map == null || map.isEmpty())
return xmlStr.toString();
xmlStr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><" + rootElement + ">");
map2Element(map, xmlStr,mappingRelation);
xmlStr.append("</" + rootElement + ">");
return xmlStr.toString();
}
@SuppressWarnings("unchecked")
private static void map2ElementZz(Map<String, Object> map, StringBuffer sb,Map<String,String> mapping) {
Set<String> set = map.keySet();
for (Iterator<String> it = set.iterator(); it.hasNext();) {
String key = (String) it.next();
String kkey = mapping.get(key);
kkey = (kkey==null)?key:kkey;
Object value = map.get(key);
if (null == value)
value = "";
if (value instanceof List<?>) {
List<Object> list = (List<Object>) map.get(key);
for (int i = 0; i < list.size(); i++) {
sb.append("<" + kkey + ">");
Map<String, Object> hm = (Map<String, Object>) list.get(i);
map2ElementZz(hm, sb,mapping);
sb.append("</" + kkey + ">");
}
} else {
if (value instanceof Map<?, ?>) {
sb.append("<" + kkey + ">");
map2ElementZz((Map<String, Object>) value, sb,mapping);
sb.append("</" + kkey + ">");
} else {
sb.append("<" + kkey + ">" + value + "</" + kkey + ">");
}
}
}
}
@SuppressWarnings("unchecked")
private static void map2Element(Map<String, Object> map, StringBuffer sb,Map<String,String> mapping) {
Set<String> set = map.keySet();
for (Iterator<String> it = set.iterator(); it.hasNext();) {
String key = (String) it.next();
String kkey = mapping.get(key);
kkey = (kkey==null)?key:kkey;
Object value = map.get(key);
if (null == value)
value = "";
if (value instanceof List<?>) {
List<Object> list = (List<Object>) map.get(key);
sb.append("<" + kkey + ">");
for (int i = 0; i < list.size(); i++) {
Map<String, Object> hm = (Map<String, Object>) list.get(i);
map2Element(hm, sb,mapping);
}
sb.append("</" + kkey + ">");
} else {
if (value instanceof Map<?, ?>) {
sb.append("<" + kkey + ">");
map2Element((Map<String, Object>) value, sb,mapping);
sb.append("</" + kkey + ">");
} else {
sb.append("<" + kkey + ">" + value + "</" + kkey + ">");
}
}
}
}
public static Map<String, Object> xml2map(String xml) throws BizException {
Document doc = null;
try {
doc = DocumentHelper.parseText(xml);
} catch (DocumentException e) {
throw new BizException("响应参数解析失败!");
}
Map<String, Object> map = new HashMap<>();
if (doc == null) {
return map;
} else {
Element rootElement = doc.getRootElement();
element2map(rootElement, map);
}
return map;
}
@SuppressWarnings("unchecked")
public static void element2map(Element elmt, Map<String, Object> map) {
if (null == elmt) {
return;
}
String name = elmt.getName();
if (elmt.isTextOnly()) {
map.put(name, elmt.getText());
} else {
Map<String, Object> mapSub = new HashMap<>();
List<Element> elements = (List<Element>) elmt.elements();
for (Element elmtSub : elements) {
element2map(elmtSub, mapSub);
}
Object first = map.get(name);
if (null == first) {
map.put(name, mapSub);
} else {
if (first instanceof List<?>) {
((List<Map<String, Object>>) first).add(mapSub);
} else {
List<Object> listSub = new ArrayList<Object>();
listSub.add(first);
listSub.add(mapSub);
map.put(name, listSub);
}
}
}
}
public static List<Object> xml2map2(String xml) throws BizException {
Document doc = null;
try {
doc = DocumentHelper.parseText(xml);
} catch (DocumentException e) {
throw new BizException("响应参数解析失败!");
}
List<Object> list=new ArrayList<Object>();
if (doc == null) {
return list;
} else {
Element rootElement = doc.getRootElement();
list=element2mapForCir(rootElement);
}
return list;
}
@SuppressWarnings("unchecked")
public static List<Object> element2mapForCir(Element elmt) {
List<Object> list=new ArrayList<Object>();
if (null == elmt) {
return list;
}
Map<String, Object> map = new HashMap<>();
String name = elmt.getName();
if(list==null ){
list=new ArrayList<Object>();
list.add(new HashMap<String, Object>());
}else if(list.size()==0){
list.add(new HashMap<String, Object>());
}else{
}
if (elmt.isTextOnly()) {
((Map<String, Object>)list.get(0)).put(name, elmt.getText());
} else {
List<Element> elements = (List<Element>) elmt.elements();
List<Object> list2=new ArrayList<Object>();
for (Element elmtSub : elements) {
List<Object> listSub=new ArrayList<Object>();
Map<String, Object> mapSub = new HashMap<>();
listSub=element2mapForCir(elmtSub);
list2.add(listSub);
}
map.put(name, list2);
list.add(map);
}
return list;
}
}