zoukankan      html  css  js  c++  java
  • Dom4j把xml转换成Map(非固定格式)

    将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.
    转换规则:
    1.主要是Map与List的互相嵌套
    2.同名称的节点会被装进List

    示例:

    import java.util.ArrayList; 
    import java.util.HashMap; 
    import java.util.Iterator; 
    import java.util.List; 
    import java.util.Map; 
    import org.dom4j.Document; 
    import org.dom4j.Element; 
    public class XmlUtils { 
      @SuppressWarnings("unchecked")  
        public static Map<String, Object> Dom2Map(Document doc){ 
            Map<String, Object> map = new HashMap<String, Object>(); 
            if(doc == null) 
                return map; 
            Element root = doc.getRootElement(); 
            for (Iterator iterator = root.elementIterator(); iterator.hasNext();) { 
                Element e = (Element) iterator.next(); 
                List list = e.elements(); 
                if(list.size() > 0){ 
                    map.put(e.getName(), Dom2Map(e)); 
                }else 
                    map.put(e.getName(), e.getText()); 
            } 
            return map; 
        } 
         @SuppressWarnings("unchecked")
        public static Map Dom2Map(Element e){ 
            Map map = new HashMap(); 
            List list = e.elements(); 
            if(list.size() > 0){ 
                for (int i = 0;i < list.size(); i++) { 
                    Element iter = (Element) list.get(i); 
                    List mapList = new ArrayList(); 
                     
                    if(iter.elements().size() > 0){ 
                        Map m = Dom2Map(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; 
        } 

    测试类:

    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Map;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;

    public class XmlToMapDemo {
     public static void main(String[] args) throws IOException,
       DocumentException {
      
      FileInputStream fis = new FileInputStream("d://a.xml");
      byte[] b = new byte[fis.available()];
      fis.read(b);
      String str = new String(b);
      
      Document doc = DocumentHelper.parseText(str);
      
      System.out.println(doc.asXML());

      long beginTime = System.currentTimeMillis();
      
      Map<String, Object> map = XmlUtils.Dom2Map(doc);

      System.out.println(map.toString());
      
      System.out.println("Use time:"+(System.currentTimeMillis()-beginTime));

     }
    }

  • 相关阅读:
    Compiling Open Source Software for UNIX using Configure Script
    vlcandroid 移植live555到android
    xcode中armv6与armv7的困惑
    ZOJ 3204 Connect them (最小生成树,输出字典序最小的解)
    POJ 3133 Manhattan Wiring (插头DP)
    HDU 4419 Colourful Rectangle 第37届ACM/ICPC 杭州赛区网络赛 1010题 (线段树)
    HDU 3829 Cat VS Dog (二分匹配求最大独立集)
    最大流模板(SAP算法)(邻接表形式)
    HDU 4417 Super Mario 第37届ACM/ICPC 杭州赛区网络赛第1008题 (划分树)
    ZOJ 3203 Light Bulb (数学直接推公式 或者 三分法)
  • 原文地址:https://www.cnblogs.com/zhaoyan001/p/6038526.html
Copyright © 2011-2022 走看看