调用方式

    //初始化并指定文件路径
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[]; //新增、编辑 节点
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().ToArray());
return makeXPath(doc, node, rest);
}
#endregion
}

C# XML配置文件读写类(用于程序配置保存)的更多相关文章

  1. c#通用配置文件读写类(xml,ini,json)

    .NET下编写程序的时候经常会使用到配置文件.配置文件格式通常有xml.ini.json等几种,操作不同类型配置文件需要使用不同的方法,操作较为麻烦.特别是针对同时应用不同格式配置文件的时候,很容易引 ...

  2. c#通用配置文件读写类与格式转换(xml,ini,json)

    .NET下编写程序的时候经常会使用到配置文件.配置文件格式通常有xml.ini.json等几种,操作不同类型配置文件需要使用不同的方法,操作较为麻烦.特别是针对同时应用不同格式配置文件的时候,很容易引 ...

  3. C# INI配置文件读写类

    ini是一种很古老的配置文件,C#操作ini文件借助windows底层ini操作函数,使用起来很方便: public class IniHelper { [DllImport("kernel ...

  4. C++[类设计] ini配置文件读写类config

      //in Config.h #pragma once #include <windows.h> #include <shlwapi.h> #pragma comment(l ...

  5. Java学习-023-Properties 类 XML 配置文件读取及写入源代码

    之前的几篇 Properties 文章已经讲述过了 Java 配置文件类 Properties 的基本用法,查看 JDK 的帮助文档时,也可看到在 Properties 类中还有两个方法 loadFr ...

  6. DOM4J 读取XML配置文件进行数据库连接

        介绍介绍DOM4J.    据说是非常优秀非常优秀的Java XML  API(Dom4j is an easy to use, open source library for working ...

  7. c# Config配置文件读写

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...

  8. Spring框架xml配置文件 复杂类型属性注入——数组 list map properties DI dependency injection 依赖注入——属性值的注入依赖于建立的对象(堆空间)

    Person类中的各种属性写法如下: package com.swift.person; import java.util.Arrays; import java.util.List; import ...

  9. 使用spring配置类代替xml配置文件注册bean类

    spring配置类,即在类上加@Configuration注解,使用这种配置类来注册bean,效果与xml文件是完全一样的,只是创建springIOC容器的方式不同: //通过xml文件创建sprin ...

随机推荐

  1. Servlet入门和ServletConfig、ServletContext

    Servlet是一门用于开发动态web资源的技术. 若想开发一个动态web资源,需要完成以下2个步骤: 1)编写一个Java类,实现servlet接口: 2)把开发好的Java类部署到web服务器中. ...

  2. POJ 1654 Area

    题意:从原点出发,沿着8个方向走,每次走1个点格或者根号2个点格的距离,最终回到原点,求围住的多边形面积. 分析:直接记录所经过的点,然后计算多边形面积.注意,不用先保存所有的点,然后计算面积,边走变 ...

  3. 公共建筑能耗监测平台的GPRS通讯服务器的开发方法分享

    公共建筑能耗监测平台的GPRS通讯服务器的开发方法分享 在这个文章里面我将用一个实际的案例来分享如何来构建一个能够接受3000+个连接的GPRS通讯服务器软件,这个软件被我认为是一个艺术品,实现周期为 ...

  4. 【OpenMesh】创建一个正方体

    原文出处: http://openmesh.org/Documentation/OpenMesh-Doc-Latest/tutorial.html 这个例程演示了: 如何声明MyMesh 如何添加顶点 ...

  5. data矩阵poj 2778 DNA Sequence

    最近研究data矩阵,稍微总结一下,以后继续补充: ac自动机处理字符串,dp计算谜底,用矩阵来减速     每日一道理 巴尔扎克说过“不幸,是天才的进升阶梯,信徒的洗礼之水,弱者的无底深渊”.风雨过 ...

  6. Tomcat启动时卡在“INFO: Deploying web application directory ”

    今天在linux上的tomcat部署一个网站时,在刚启动tomcat的时候提示启动成功,然后也能访问成功. 可是第二次启动时虽然没有报错,但无法访问tomcat,查看了catalina.out日志,发 ...

  7. 用CATransform3D实现3D效果和制作简单3D动画

    我们先来看下CATransform3D的头文件 struct CATransform3D { CGFloat m11, m12, m13, m14; CGFloat m21, m22, m23, m2 ...

  8. java中的instanceof

    instanceof是Java.php的一个二元操作符(运算符),和==,>,<是同一类东西.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是判断其左边对象是否为其右边类的实 ...

  9. ecshop3.0.0注入

    配个环境来演示给别人看..分析一下.flow.php文件缺陷,order_id在post请求没有单引号保护.造成注入 <?php elseif ($_REQUEST['step'] == 're ...

  10. php中switch语句case后表达式写法记录一

    可作等级评价: $var = 95; switch(true){ case $var < 100; $level = 1; break; case $var < 95; $level = ...