package test; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class XmlStr { public static void main(String[] args) throws Exception { String xmlStr = "<returnInfo><resultInfo><returnCode>SUC</returnCode><codeDesc>成功</codeDesc></resultInfo><routeInfo><maxRate>2048</maxRate></routeInfo></returnInfo>"; List<Map<String, String>> resultList = iterateWholeXML(xmlStr); Map<String, String> retMap = new HashMap<String, String>(); 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 遍歷每個節點和屬性 * * @param xmlStr */ public static List<Map<String, String>> iterateWholeXML(String xmlStr) { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); try { Document document = DocumentHelper.parseText(xmlStr); Element root = document.getRootElement(); recursiveNode(root, list); return list; } catch (DocumentException e) { e.printStackTrace(); } return null; } /** * 遞歸遍歷所有的節點獲得對應的值 * * @param */ private static void recursiveNode(Element root, List<Map<String, String>> list) { // 遍歷根結點的所有孩子節點 HashMap<String, String> map = new HashMap<String, String>(); 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); } } } }