C# XML配置文件读写类(用于程序配置保存)

C# XML配置文件读写类(用于程序配置保存)

以前一直在用INI的方式进行程序的配置保存,也挺方便的。

为了更好的扩展性,今天写了个用xml的方式进行配置文件的读写。

调用方式

 
 
  1. //初始化并指定文件路径
  2. XmlConfigUtil util = new XmlConfigUtil("C:\\1.xml");
  3.  
  4. //写入要保存的值以及路径(System、Menu.....都是路径)  params string[] 的方式
  5. util.Write("testValue", "System", "Menu");
  6.  
  7. //读取System/Menu下的值
  8. Console.WriteLine(util.Read("System", "Menu"));

文件路径存在则正常读取,不存在则自动创建。

 

源码

以下是 XmlConfigUtil 的源码,本文将随时更新。

 
 
  1. /// <summary>
  2. /// 说明:程序配置保存帮助类 for XML
  3. /// 更新:http://www.wxzzz.com/1352.html
  4. /// </summary>
  5. public class XmlConfigUtil
  6. {
  7.     #region 全局变量
  8.     string _xmlPath;        //文件所在路径
  9.     #endregion
  10.  
  11.     #region 构造函数
  12.     /// <summary>
  13.     /// 初始化一个配置
  14.     /// </summary>
  15.     /// <param name="xmlPath">配置所在路径</param>
  16.     public XmlConfigUtil(string xmlPath)
  17.     {
  18.         _xmlPath = Path.GetFullPath(xmlPath);
  19.     }
  20.     #endregion
  21.  
  22.     #region 公有方法
  23.     /// <summary>
  24.     /// 写入配置
  25.     /// </summary>
  26.     /// <param name="value">写入的值</param>
  27.     /// <param name="nodes">节点</param>
  28.     public void Write(string value, params string[] nodes)
  29.     {
  30.         //初始化xml
  31.         XmlDocument xmlDoc = new XmlDocument();
  32.         if (File.Exists(_xmlPath))
  33.             xmlDoc.Load(_xmlPath);
  34.         else
  35.             xmlDoc.LoadXml("<XmlConfig />");
  36.         XmlNode xmlRoot = xmlDoc.ChildNodes[0];
  37.  
  38.         //新增、编辑 节点
  39.         string xpath = string.Join("/", nodes);
  40.         XmlNode node = xmlDoc.SelectSingleNode(xpath);
  41.         if (node == null)    //新增节点
  42.         {
  43.             node = makeXPath(xmlDoc, xmlRoot, xpath);
  44.         }
  45.         node.InnerText = value;
  46.  
  47.         //保存
  48.         xmlDoc.Save(_xmlPath);
  49.     }
  50.  
  51.     /// <summary>
  52.     /// 读取配置
  53.     /// </summary>
  54.     /// <param name="nodes">节点</param>
  55.     /// <returns></returns>
  56.     public string Read(params string[] nodes)
  57.     {
  58.         XmlDocument xmlDoc = new XmlDocument();
  59.         if (File.Exists(_xmlPath) == false)
  60.             return null;
  61.         else
  62.             xmlDoc.Load(_xmlPath);
  63.  
  64.         string xpath = string.Join("/", nodes);
  65.         XmlNode node = xmlDoc.SelectSingleNode("/XmlConfig/" + xpath);
  66.         if (node == null)
  67.             return null;
  68.  
  69.         return node.InnerText;
  70.     }
  71.     #endregion
  72.  
  73.     #region 私有方法
  74.     //递归根据 xpath 的方式进行创建节点
  75.     static private XmlNode makeXPath(XmlDocument doc, XmlNode parent, string xpath)
  76.     {
  77.  
  78.         // 在XPath抓住下一个节点的名称;父级如果是空的则返回
  79.         string[] partsOfXPath = xpath.Trim('/').Split('/');
  80.         string nextNodeInXPath = partsOfXPath.First();
  81.         if (string.IsNullOrEmpty(nextNodeInXPath))
  82.             return parent;
  83.  
  84.         // 获取或从名称创建节点
  85.         XmlNode node = parent.SelectSingleNode(nextNodeInXPath);
  86.         if (node == null)
  87.             node = parent.AppendChild(doc.CreateElement(nextNodeInXPath));
  88.  
  89.         // 加入的阵列作为一个XPath表达式和递归余数
  90.         string rest = String.Join("/", partsOfXPath.Skip(1).ToArray());
  91.         return makeXPath(doc, node, rest);
  92.     }
  93.     #endregion
  94. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值