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<String,Object> map = new HashMap<String,Object>();
        
        //创建读取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<String> 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<list.size();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;
    }
    
}

















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在VB(Visual Basic),可以使用 System.Xml 命名空间XmlDocument 类来保存参数到 XML 文件并读取。以下是保存参数到 XML 文件和读取 XML 文件参数的示例代码: 保存参数到 XML 文件: ```vb Imports System.Xml ' 创建 XmlDocument 实例 Dim xmlDoc As New XmlDocument() ' 创建根节点 Dim rootNode As XmlNode = xmlDoc.CreateElement("Parameters") xmlDoc.AppendChild(rootNode) ' 创建参数节点和元素 Dim paramNode As XmlNode = xmlDoc.CreateElement("Parameter") rootNode.AppendChild(paramNode) Dim nameElement As XmlElement = xmlDoc.CreateElement("Name") nameElement.InnerText = "Parameter 1" paramNode.AppendChild(nameElement) Dim valueElement As XmlElement = xmlDoc.CreateElement("Value") valueElement.InnerText = "100" paramNode.AppendChild(valueElement) ' 保存 XML 文件 xmlDoc.Save("参数文件路径/文件名.xml") ``` 在上述代码,首先导入了 System.Xml 命名空间。然后创建了一个 XmlDocument 对象实例,并使用 `CreateElement` 和 `CreateTextNode` 方法创建了 XML 文件的结构和数据。参数的名称和值分别作为元素的子节点添加到参数节点。最后,使用 `Save` 方法将 XmlDocument 对象保存XML 文件。 读取 XML 文件的参数: ```vb Imports System.Xml ' 创建 XmlDocument 实例 Dim xmlDoc As New XmlDocument() ' 加载 XML 文件 xmlDoc.Load("参数文件路径/文件名.xml") ' 获取根节点 Dim rootNode As XmlNode = xmlDoc.SelectSingleNode("Parameters") ' 遍历参数节点 For Each paramNode As XmlNode In rootNode.ChildNodes ' 获取参数名称和值 Dim paramName As String = paramNode.SelectSingleNode("Name").InnerText Dim paramValue As String = paramNode.SelectSingleNode("Value").InnerText ' 使用参数名称和值进行后续操作 Console.WriteLine("Parameter Name: " & paramName) Console.WriteLine("Parameter Value: " & paramValue) Next ``` 在上述代码,首先导入了 System.Xml 命名空间。然后创建了一个 XmlDocument 对象实例,并使用 `Load` 方法加载指定路径下的 XML 文件。接下来,通过 `SelectSingleNode` 方法获取根节点,并使用循环遍历参数节点。通过 `SelectSingleNode` 方法获取参数节点的名称和值,并使用这些值进行后续操作(此处仅输出到控制台)。 注意:在代码示例的参数文件路径/文件名.xml 部分,请替换为实际的文件路径和文件名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值