C# XML配置文件讀寫類(用於程序配置保存)


調用方式

    //初始化並指定文件路徑
    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
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM