使用webservice接口时,将XML转为MAP格式进行数据处理
代码展示
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.util.*;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XmlToMap {
public static Map<String, Object> parseXml(String xml) throws DocumentException {
Map map = new HashMap();
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new ByteArrayInputStream(xml.getBytes("UTF-8")));
Element root = document.getRootElement();
elementTomap(root, map);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return map;
}
@SuppressWarnings("unchecked")
public static Map<String, Object> elementTomap(Element outele, Map<String, Object> outmap) {
List<Element> list = outele.elements();
int size = list.size();
if (size == 0) {
outmap.put(outele.getName(), outele.getTextTrim());
} else {
Map<String, Object> innermap = new HashMap<String, Object>();
int i = 1;
for (Element ele1 : list) {
String eleName = ele1.getName();
String value = ele1.getText();
Object obj = innermap.get(eleName);
if (obj == null) {
elementTomap(ele1, innermap);
} else {
if (obj instanceof java.util.Map) {
List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();
list1.add((Map<String, Object>) innermap.remove(eleName));
elementTomap(ele1, innermap);
list1.add((Map<String, Object>) innermap.remove(eleName));
innermap.put(eleName, list1);
} else if (obj instanceof String) {
innermap.put(eleName + i, value);
i++;
} else {
elementTomap(ele1, innermap);
Map<String, Object> listValue = (Map<String, Object>) innermap.get(eleName);
((List<Map<String, Object>>) obj).add(listValue);
innermap.put(eleName, obj);
}
}
}
outmap.put(outele.getName(), innermap);
}
return outmap;
}
}
效果展示
示例代码
public static void main(String[] args) {
String ss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<ROOT>" +
"<HEAD><STR>ss</STR>" +
"</HEAD>" +
"</ROOT>" ;
Map<String,Object> map ;
try {
map = XmlToMap.parseXml(ss);
for(Map.Entry<String, Object> en : map.entrySet()){
System.out.println("keys:" + en.getKey() +",values:"+ en.getValue());
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
结果展示
"C:\Program Files (x86)\Java\jdk1.8.0_152\bin\java.exe""···"
keys:ROOT,values:{HEAD={STR=ss}}
进程已结束,退出代码为 0