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 ...
随机推荐
- ajax简单后台交互
ajax简单后台交互 1,扯淡 单身的生活,大部分时间享受自由,小部分时间忍受寂寞. 生活有时候,其实蛮苦涩,让人难以下咽.那些用岁月积累起来的苦闷,无处宣泄,在自己的脑海里蔓延成一片片荆棘,让你每每 ...
- RobHess的SIFT源码分析:综述
最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...
- 数据库中的null问题
在数据库中有些列的值可以为null,这一篇,我们围绕数据库中的null来讲述. 1. null与 “”.0的区别 数据库中的null表示——不知道,“”——一个空字符串,0则是一个数值. 所以n ...
- windows下npm scripts不能执行的问题
最近在学webpack为了方便把运行脚本写入package.json文件中,如下: "scripts": { "start": "webpack-de ...
- hdu1046
#include<iostream> #include<cmath> using namespace std; int main() { int T,t=0,m,n; cin& ...
- python命令调用函数os.popen
参考自xerosploit 描述:利用os.popen()函数调用系统命令nmap进行扫描,并用grep命令对扫描结果关键内容进行提取 代码 #!/usr/bin/env pthon #--*--co ...
- Map - leetcode [哈希表]
149. Max Points on a Line unordered_map<float, int> hash 记录的是斜率对应的点数 unordered_map<float, i ...
- c# 读取ACCESS 数据库
using System; using System.Collections.Generic; using System.Data.OleDb; using System.IO; using Syst ...
- hadoop(一)
1 环境熟悉安装jdk.hadoop配置xml文件,启动伪分布式运行example-jar,测试mapreduce程序2 mapreduce编程使用eclipse开发mapreduce程序,导出jar ...
- HTML form的一些属性(第一版)
p,li { white-space: pre-wrap } HTML表单属性总结(第一版) 基本格式为:<input type="类型" name="名字[唯一, ...