项目中通过webservice获取的内容都是xml的字符串,每次解析这些字符串比较麻烦,就写了个方法将xml文本解析成List<Map<String,String>格式

/**
* 将xml文件或者xml字符串解析成List<Map<String,String>
* @param pathOrstr 路径或者xml文本
* @param type=path 表示传入的是一个路径 type=text 表示传入的是一个文本
* @return
*/
private static List<Map<String,String>> getXMLMapList(String pathOrstr,String type){
SAXReader reader=new SAXReader();
List<Map<String,String>> listMap=null;
try {
Document doc=null;
if("path".equals(type)){
doc=reader.read(pathOrstr);
}else if("text".equals(type)){
doc=DocumentHelper.parseText(pathOrstr);
}else{
throw new RuntimeException("请传入正确的参数");
}
//获取根节点,这里可以修改成任意的某个节点
Element root=doc.getRootElement();
listMap=new ArrayList<Map<String,String>>();
//遍历根节点下的第一级节点
for(Element e:root.elements()){
Map<String,String> map=new HashMap<String, String>();
//遍历节点中的属性
for(Iterator attIt=e.attributeIterator();attIt.hasNext();){
Attribute attr=(Attribute)attIt.next();
//将属性名和属性值封装到map中
map.put(attr.getName(), attr.getText());
}
listMap.add(map);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return listMap;
}

测试

public static void main(String[] args) {
String path="src/test.xml";
List<Map<String, String>> pathListMap = getXMLMapList(path,"path");
System.out.println(pathListMap);
String xmlStr="<?xml version='1.0' encoding='UTF-8'?><root><node id='1' title='标题一' telphone='15652000269'/><node id='2' title='标题二' telphone='13141144033'/></root>";
List<Map<String, String>> strListMap = getXMLMapList(xmlStr, "text");

System.out.println(strListMap);
}

打印出的内容

[{id=1, title=标题一, telphone=15652000269}, {id=2, title=标题二, telphone=13141144033}]
[{id=1, title=标题一, telphone=15652000269}, {id=2, title=标题二, telphone=13141144033}]