读取简单的xml文件

如有不明白的地方欢迎加QQ群 14670545 探讨

我也不喜欢嵌套很多层的xml,当然某些情况下这样显示起来更加的直白符合逻辑,下面用一个简单的xml来做例子,xml内容如下(名字:CreateHtml.config ):



  
  
  
  
    
  
  
  
  
    
    
  

现在我只想得到web节点下的website项怎么操作呢。只需要用XmlDocument的Load方法将某个路径下的xml文件转载进内存,然后用XmlNodeList进行筛选即可。

当然了,在读取xml文件时候我们无可避免会涉及到文件的操作,比如该路径的xml是否存在:

/// 
    /// 检查某个文件是否存在
    /// 
    /// 文件的物理路径
    /// 
    private bool IsExistFiles(string filePath)
    {
        try
        {
            if (System.IO.File.Exists(filePath))
                return true;
        }
        catch (Exception ex) { throw new Exception(ex.Message + "\r\n" + "May be other error:文件不存在或禁止访问!"); }
        return false;
    }

下面我们在网站的跟目录下新建一个config文件夹,专门放配置文件用的,在这个文件夹中新建一个刚刚内容的CreateHtml.config xml文件。然后页面放一个按钮,读取这个xml:

<%=aaaa %>


using System;
using System.Xml;
using System.Collections.Generic;
public string aaaa = string.Empty;
    /// 
    /// 读取xml文件测试
    /// 
    protected void btnGetXml_Click(object sender, EventArgs e)
    {
        Dictionary dic = ReadConfig("~/Config/CreateHtml.config", "web/website");
        if (dic == null)
            return;
        foreach (KeyValuePair kv in dic)
            aaaa += "
" + kv.Key + ":" + kv.Value; } /// /// 读取配置文件某节点的个数 /// ///配置文件的路径 ///要获取的节点 private Dictionary ReadConfig(string path, string nodeName) { Dictionary dic = new Dictionary(); string absoPath = string.Empty; //绝对路径 try { absoPath = System.Web.HttpContext.Current.Server.MapPath(path); if (IsExistFiles(absoPath)) { XmlDocument xd = new XmlDocument(); xd.Load(absoPath); XmlNodeList nodeList = xd.SelectNodes(nodeName); //得到相应节点的集合 if (nodeList != null && nodeList.Count > 0) for (int i = 0; i < nodeList.Count; i++) dic.Add(nodeList.Item(i).Attributes["key"].Value, nodeList.Item(i).Attributes["value"].Value); } return dic; } catch (Exception ex) { throw new Exception(ex.Message); } }

看看效果:

读取简单的xml文件_第1张图片

如果要选择testAA项,只需要修改SelectNodes对象即可(web/testAA)。

注意,我用的是Dictionary存储,字典是键值对KeyValuePair,哈希要保持键值唯一,所以你在用上面的方法时,xml里面的key不能有重复,不然会报错。解决方法,1.修改Add方法,确保唯一,有重复就不添加。

public class SafeDictionary
	{
		private readonly object _Padlock = new object();
		private readonly Dictionary _Dictionary = new Dictionary();
		
		public bool ContainsKey(TKey key)
		{
			return _Dictionary.ContainsKey(key);
		}

		public TValue this[TKey key]
		{
			get
			{
				return _Dictionary[key];
			}
		}
		
		public void Add(TKey key, TValue value)
		{
			lock(_Padlock)
			{
				_Dictionary.Add(key,value);
			}
		}
	}


2.换一个对象存储,比如NameValueCollection,在这就不说了。

你可能感兴趣的:(C#,ASP.NET)