zoukankan      html  css  js  c++  java
  • 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
        }
  • 相关阅读:
    Vue中改变对象的注意事项
    Object.assign简单总结
    Base64编码
    vue中prop传值时加不加v-bind(冒号:)
    内联元素的padding和margin
    flex自适应宽度显示省略号
    Http和Https
    JVisualVM 模拟一次内存泄漏场景分析
    Lucene
    布隆算法原理
  • 原文地址:https://www.cnblogs.com/xuxiaoshuan/p/5752434.html
Copyright © 2011-2022 走看看