public class XmlUtil { @SuppressWarnings({ "rawtypes", "unchecked" }) public static Map xml2Map(String xml) throws JDOMException, IOException { Map map = new HashMap(); StringReader reader = new StringReader(xml); SAXBuilder builder = new SAXBuilder(); Document build = builder.build(reader); Element root = build.getRootElement(); List<Element> elements = root.getChildren(); for (Element e : elements) { List<Element> cs = e.getChildren(); if (cs.isEmpty()) { map.put(e.getName(), e.getText()); } else { map.put(e.getName(), ele2Map(e)); } } return map; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static Map ele2Map(Element e) { Map map = new HashMap(); List list = e.getChildren(); if (list.size() > 0) { for (int i = 0; i < list.size(); i++) { Element iter = (Element) list.get(i); List mapList = new ArrayList(); if (iter.getChildren().size() > 0) { Map m = ele2Map(iter); if (map.get(iter.getName()) != null) { Object obj = map.get(iter.getName()); if (!obj.getClass().getName().equals("java.util.ArrayList")) { mapList = new ArrayList(); mapList.add(obj); mapList.add(m); } if (obj.getClass().getName().equals("java.util.ArrayList")) { mapList = (List) obj; mapList.add(m); } map.put(iter.getName(), mapList); } else map.put(iter.getName(), m); } else { if (map.get(iter.getName()) != null) { Object obj = map.get(iter.getName()); if (!obj.getClass().getName().equals("java.util.ArrayList")) { mapList = new ArrayList(); mapList.add(obj); mapList.add(iter.getText()); } if (obj.getClass().getName().equals("java.util.ArrayList")) { mapList = (List) obj; mapList.add(iter.getText()); } map.put(iter.getName(), mapList); } else map.put(iter.getName(), iter.getText()); } } } else map.put(e.getName(), e.getText()); return map; } public static void main(String[] args) throws JDOMException, IOException { String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +"<ROOT>" +"<PRODUCTS>" +"<PRODUCT>" +"<PRODUCT_ID>1300511110031100200000101</PRODUCT_ID>" +"<NAME>10000001</NAME>" +"</PRODUCT>" +"<PRODUCT>" +"<PRODUCT_ID>1300511110031100200000102</PRODUCT_ID>" +"<NAME>10000002</NAME>" +"</PRODUCT>" +"</PRODUCTS>" +"</ROOT>"; Map map = xml2Map(xml); System.out.println(map); } }
運行結果(注意若是無ROOT節點結果只會有一個PRODUCT)java
{PRODUCTS={PRODUCT=[{NAME=10000001, PRODUCT_ID=1300511110031100200000101}, {NAME=10000002, PRODUCT_ID=1300511110031100200000102}]}}
JDOM依賴dom
<dependency> <groupId>org.jdom</groupId> <artifactId>jdom</artifactId> <version>1.1.3</version> </dependency>