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[]; //新增、编辑 节点
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配置文件读写类(用于程序配置保存)的更多相关文章
- c#通用配置文件读写类(xml,ini,json)
.NET下编写程序的时候经常会使用到配置文件.配置文件格式通常有xml.ini.json等几种,操作不同类型配置文件需要使用不同的方法,操作较为麻烦.特别是针对同时应用不同格式配置文件的时候,很容易引 ...
- c#通用配置文件读写类与格式转换(xml,ini,json)
.NET下编写程序的时候经常会使用到配置文件.配置文件格式通常有xml.ini.json等几种,操作不同类型配置文件需要使用不同的方法,操作较为麻烦.特别是针对同时应用不同格式配置文件的时候,很容易引 ...
- C# INI配置文件读写类
ini是一种很古老的配置文件,C#操作ini文件借助windows底层ini操作函数,使用起来很方便: public class IniHelper { [DllImport("kernel ...
- C++[类设计] ini配置文件读写类config
//in Config.h #pragma once #include <windows.h> #include <shlwapi.h> #pragma comment(l ...
- Java学习-023-Properties 类 XML 配置文件读取及写入源代码
之前的几篇 Properties 文章已经讲述过了 Java 配置文件类 Properties 的基本用法,查看 JDK 的帮助文档时,也可看到在 Properties 类中还有两个方法 loadFr ...
- DOM4J 读取XML配置文件进行数据库连接
介绍介绍DOM4J. 据说是非常优秀非常优秀的Java XML API(Dom4j is an easy to use, open source library for working ...
- c# Config配置文件读写
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
- Spring框架xml配置文件 复杂类型属性注入——数组 list map properties DI dependency injection 依赖注入——属性值的注入依赖于建立的对象(堆空间)
Person类中的各种属性写法如下: package com.swift.person; import java.util.Arrays; import java.util.List; import ...
- 使用spring配置类代替xml配置文件注册bean类
spring配置类,即在类上加@Configuration注解,使用这种配置类来注册bean,效果与xml文件是完全一样的,只是创建springIOC容器的方式不同: //通过xml文件创建sprin ...
随机推荐
- C#基础知识回顾--线程传参
C#基础知识回顾--线程传参 在不传递参数情况下,一般大家都使用ThreadStart代理来连接执行函数,ThreadStart委托接收的函数不能有参数, 也不能有返回值.如果希望传递参数给执行函数, ...
- Qt在表格中加入控件
任务:使用QTableWidget动态生成表格,在每行的某两列中加入QComboBox下拉框控件和QPushButton按钮控件 有添加,删除,编辑功能,每行的按钮可以浏览文件夹并选择文件 1.新建一 ...
- [置顶] 遵循Java EE标准体系的开源GIS服务平台之二:平台部署
传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...
- jvm加载class原理
“委托机制”是指先委托父类装载器寻找目标类,只有在找不到的情况下才从自己的路径中查找并载入.这一点是从安全的方面考虑的,试想一下如果有人写了一个恶意的基础类(如java.lang.String)并加载 ...
- Python中的多进程与多线程(二)
在上一章中,学习了Python多进程编程的一些基本方法:使用跨平台多进程模块multiprocessing提供的Process.Pool.Queue.Lock.Pipe等类,实现子进程创建.进程池(批 ...
- Linux系统下搭建DNS服务器——DNS原理总结
2017-01-07 整理 DNS原理 域名到IP地址的解析过程 IP地址到域名的反向域名解析过程 抓包分析DNS报文和具体解析过程 DNS服务器搭建和配置 这个东东也是今年博主参见校招的时候被很多公 ...
- Windows平台下安装Eclipse插件,开发Hadoop应用
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- android 在5.0以后不允许使用隐式Intent方式来启动Service
android5.0以后不能使用隐式intent :需要指定Intent的ComponentName信息:intent.setComponent(xxx),或指定Intent的setPackage(& ...
- Redmine数据库备份及搬家
Bitnami Redmine的备份分2种方式: 1.导出数据库 2.整个目录搬家 不管是哪种都想停掉服务,redmine相关的服务有以下5个: redmineApache redmineMySQL ...
- Apache2.2下载及安装
php5.5 + apache2.4 安装配置图文步骤 http://wenku.baidu.com/link?url=8OHaJATVBHP5QrD-J2pTkmBOjY-ZG5cDngKMz7wl ...