xml读取并转存到map中

/**
 *
 */
package cn.xdl.test;

import java.io.File;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;


/**
 * @author Administrator
 *
 */
public class XMLtEST {
    
    @Test
    public void xmlToMap() throws DocumentException{
        Map map = new HashMap();
        
        //创建读取xml的对象
        SAXReader reader = new SAXReader();
        //指定读取的文件
        Document doc = reader.read(new File("pers.xml"));
        
        //读取根节点
        Element root = doc.getRootElement();
        
        //进行循环遍历,添加到集合
        //获取迭代器,迭代元素
        for(Iterator iterator = root.elementIterator();iterator.hasNext();){
            
            //迭代根节点中的所有子元素
            Element e = (Element) iterator.next();
            //System.out.println(e.getName());
            
            //获取该元素下的所有子元素,并放入list集合中
            List list = e.elements();
            //System.out.println(list.size());
            
            //判断该节点下是否还有子节点
            if(list.size()>0){
                //如果该节点下还有子节点,则调用方法,继续进行解析
                map.put(e.getName(),returnMap(e));
            }else {
                map.put(e.getName(),e.getText());
            }
        }
        //遍历出map集合中的元素
        Set keySet = map.keySet();
        for(String s : keySet){
            System.out.println(s+"  :  "+map.get(s));
        }
    }
    
    
    


    
    //如果节点下还有节点,则调用该方法,继续进行解析
    public static Map returnMap(Element e){
        
        Map map = new HashMap();
        //将该节点下所有子元素读进来,并放在list集合中
        List list = e.elements();
        
        //如果还有子元素,则继续进行解析
        if(list.size()>0){
            for(int i = 0;i                 //循环获取集合中的元素
                Element ele = (Element) list.get(i);
                List listMapList = new ArrayList();
                
                //如果该元素下,仍有子节点,则用递归进行进一步解析
                if(ele.elements().size()>0){
                    //调用自身会返回一个Map集合
                    Map m = returnMap(ele);
                    //判断map中是否已经有该元素,!=null,则代表该key已经存在
                    if(map.get(ele.getName()) != null){
                        //如果已经存在,获取该对象
                        Object obj = map.get(ele.getName());
                        //判断该元素是不是一个list集合,如果不是一个list集合,则直接添加到listMapList集合中
                        if(!obj.getClass().getName().equals("java.util.ArrayList")){
                            listMapList.add(obj);
                            listMapList.add(m);//将返回的map集合也放进集合中
                        }//如果该元素是一个list集合,则将该元素赋值给listMapList
                          if(obj.getClass().getName().equals("java.util.ArrayList")){  
                              listMapList = (List) obj;  
                              listMapList.add(m);  
                            }
                          //将该元素添加到map集合中去
                          map.put(ele.getName(),listMapList);
                    }else{    //如果该元素还未存在map集合中,则直接添加到map中
                        map.put(ele.getName(),m);
                        
                    }
                }else{    //如果该节点下,没有子节元素了,
                    if(map.get(ele.getName()) !=null){
                        Object obj = map.get(ele.getName());  
                        if(!obj.getClass().getName().equals("java.util.ArrayList")){  
                            listMapList.add(obj);  
                            listMapList.add(ele.getText());  
                        }
                          if(obj.getClass().getName().equals("java.util.ArrayList")){  
                              listMapList = (List) obj;  
                              listMapList.add(ele.getText());  
                            }  
                          map.put(ele.getName(), listMapList);
                    }else{
                           map.put(ele.getName(), ele.getText());
                    }
                }
            }
        }else{
            map.put(e.getName(), e.getText());  
            
        }
        return map;
    }
    
}

















你可能感兴趣的:(xml读取并转存到map中)