調用方式
//初始化並指定文件路徑 XmlConfigUtil util = new XmlConfigUtil("C:\\1.xml"); //寫入要保存的值以及路徑(System、Menu.....都是路徑) params string[] 的方式 util.Write("testValue", "System", "Menu"); //讀取System/Menu下的值 Console.WriteLine(util.Read("System", "Menu"));
文件路徑存在則正常讀取,不存在則自動創建。
源碼
/// <summary> /// 說明:程序配置保存幫助類 for XML /// 更新:http://www.wxzzz.com/1352.html /// </summary> public class XmlConfigUtil { #region 全局變量 string _xmlPath; //文件所在路徑 #endregion #region 構造函數 /// <summary> /// 初始化一個配置 /// </summary> /// <param name="xmlPath">配置所在路徑</param> public XmlConfigUtil(string xmlPath) { _xmlPath = Path.GetFullPath(xmlPath); } #endregion #region 公有方法 /// <summary> /// 寫入配置 /// </summary> /// <param name="value">寫入的值</param> /// <param name="nodes">節點</param> public void Write(string value, params string[] nodes) { //初始化xml XmlDocument xmlDoc = new XmlDocument(); if (File.Exists(_xmlPath)) xmlDoc.Load(_xmlPath); else xmlDoc.LoadXml("<XmlConfig />"); XmlNode xmlRoot = xmlDoc.ChildNodes[0]; //新增、編輯 節點 string xpath = string.Join("/", nodes); XmlNode node = xmlDoc.SelectSingleNode(xpath); if (node == null) //新增節點 { node = makeXPath(xmlDoc, xmlRoot, xpath); } node.InnerText = value; //保存 xmlDoc.Save(_xmlPath); } /// <summary> /// 讀取配置 /// </summary> /// <param name="nodes">節點</param> /// <returns></returns> public string Read(params string[] nodes) { XmlDocument xmlDoc = new XmlDocument(); if (File.Exists(_xmlPath) == false) return null; else xmlDoc.Load(_xmlPath); string xpath = string.Join("/", nodes); XmlNode node = xmlDoc.SelectSingleNode("/XmlConfig/" + xpath); if (node == null) return null; return node.InnerText; } #endregion #region 私有方法 //遞歸根據 xpath 的方式進行創建節點 static private XmlNode makeXPath(XmlDocument doc, XmlNode parent, string xpath) { // 在XPath抓住下一個節點的名稱;父級如果是空的則返回 string[] partsOfXPath = xpath.Trim('/').Split('/'); string nextNodeInXPath = partsOfXPath.First(); if (string.IsNullOrEmpty(nextNodeInXPath)) return parent; // 獲取或從名稱創建節點 XmlNode node = parent.SelectSingleNode(nextNodeInXPath); if (node == null) node = parent.AppendChild(doc.CreateElement(nextNodeInXPath)); // 加入的陣列作為一個XPath表達式和遞歸余數 string rest = String.Join("/", partsOfXPath.Skip(1).ToArray()); return makeXPath(doc, node, rest); } #endregion }