packagetest;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importorg.dom4j.Attribute;importorg.dom4j.Document;importorg.dom4j.DocumentException;importorg.dom4j.DocumentHelper;importorg.dom4j.Element;public classXmlStr {public static void main(String[] args) throwsException {
String xmlStr= "SUC成功2048";
List> resultList =iterateWholeXML(xmlStr);
Map retMap = new HashMap();for (int i = 0; i < resultList.size(); i++) {
Map map=(Map) resultList.get(i);for (Iterator iterator =map.keySet().iterator(); iterator.hasNext();) {
String key=(String) iterator.next();
retMap.put(key, (String) map.get(key));
}
}
System.out.println("reMap" +retMap);
}/*** 递归解析任意的xml 遍历每个节点和属性
*
*@paramxmlStr*/
public static List>iterateWholeXML(String xmlStr) {
List> list = new ArrayList>();try{
Document document=DocumentHelper.parseText(xmlStr);
Element root=document.getRootElement();
recursiveNode(root, list);returnlist;
}catch(DocumentException e) {
e.printStackTrace();
}return null;
}/*** 递归遍历所有的节点获得对应的值
*
*@param
*/
private static void recursiveNode(Element root, List>list) {//遍历根结点的所有孩子节点
HashMap map = new HashMap();for (Iterator iter =root.elementIterator(); iter.hasNext();) {
Element element=(Element) iter.next();if (element == null)continue;//获取属性和它的值
for (Iterator attrs =element.attributeIterator(); attrs.hasNext();) {
Attribute attr=(Attribute) attrs.next();
System.out.println(attr);if (attr == null)continue;
String attrName=attr.getName();
System.out.println("attrname" +attrName);
String attrValue=attr.getValue();
map.put(attrName, attrValue);
}//如果有PCDATA,则直接提出
if(element.isTextOnly()) {
String innerName=element.getName();
String innerValue=element.getText();
map.put(innerName, innerValue);
list.add(map);
}else{//递归调用
recursiveNode(element, list);
}
}
}
}