public class ConfigFile
{ protected readonly string configBasePath = "Root/Config"; /// <summary>
/// 当前配置文件的完整路径
/// </summary>
public string FileName { get; private set; } /// <summary>
/// 获取或设置配置
/// </summary>
/// <param name="key">键名</param>
/// <returns>键名对应的值</returns>
public string this[string key]
{
get
{
return GetConfigValue(key);
}
set
{
AddOrSetConfigValue(key, value);
}
} /// <summary>
/// 构造函数
/// </summary>
protected ConfigFile()
{
} /// <summary>
/// 读取配置文件
/// </summary>
/// <param name="filename">配置文件名</param>
/// <returns>ConfigFile对象</returns>
public static ConfigFile LoadFile(string filename)
{
if (!File.Exists(filename)) return null;
return new ConfigFile { FileName = filename };
} /// <summary>
/// 读取或创建配置文件
/// </summary>
/// <param name="filename">配置文件名</param>
/// <returns>ConfigFile对象</returns>
public static ConfigFile LoadOrCreateFile(string filename)
{
if (!File.Exists(filename))
{
var config = new ConfigFile{ FileName = filename };
config.CreateFile();
return config;
}
return LoadFile(filename);
} /// <summary>
/// 创建配置文件,可在子类中重写此方法
/// </summary>
protected virtual void CreateFile()
{
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(dec);
XmlElement root = doc.CreateElement("Root");
doc.AppendChild(root);
root.AppendChild(doc.CreateElement("Config"));
doc.Save(FileName);
} /// <summary>
/// 根据Key从配置文件中获取值
/// </summary>
/// <param name="key">键名</param>
/// <returns>获取的值,找不到返回""</returns>
public string GetConfigValue(string key)
{
return GetKeyValue($"{configBasePath}/{key}");
} /// <summary>
/// 从配置文件中根据key获取值并转化为相应数据类型
/// </summary>
/// <param name="key">键名</param>
/// <param name="result">转化后的值</param>
/// <returns>转化是否成功</returns>
public bool TryParseConfigValue(string key, out int result)
{
var v = GetConfigValue(key);
return int.TryParse(v, out result);
} /// <summary>
/// 从配置文件中根据key获取值并转化为相应数据类型
/// </summary>
/// <param name="key">键名</param>
/// <param name="result">转化后的值</param>
/// <returns>转化是否成功</returns>
public bool TryParseConfigValue(string key, out bool result)
{
var v = GetConfigValue(key);
return bool.TryParse(v, out result);
} /// <summary>
/// 从配置文件中根据key获取值并转化为相应数据类型
/// </summary>
/// <param name="key">键名</param>
/// <param name="result">转化后的值</param>
/// <returns>转化是否成功</returns>
public bool TryParseConfigValue(string key, out DateTime result)
{
var v = GetConfigValue(key);
return DateTime.TryParse(v, out result);
} /// <summary>
/// 从配置文件中根据key获取值并转化为相应数据类型
/// </summary>
/// <param name="key">键名</param>
/// <param name="result">转化后的值</param>
/// <returns>转化是否成功</returns>
public bool TryParseConfigValue(string key,out float result)
{
var v = GetConfigValue(key);
return float.TryParse(v, out result);
} /// <summary>
/// 从配置文件中根据key获取值并转化为相应数据类型
/// </summary>
/// <param name="key">键名</param>
/// <param name="result">转化后的值</param>
/// <returns>转化是否成功</returns>
public bool TryParseConfigValue(string key,out double result)
{
var v = GetConfigValue(key);
return double.TryParse(v, out result);
} /// <summary>
/// 从配置文件中根据key获取值并转化为相应数据类型
/// </summary>
/// <param name="key">键名</param>
/// <param name="result">转化后的值</param>
/// <returns>转化是否成功</returns>
public bool TryParseConfigValue(string key, out decimal result)
{
var v = GetConfigValue(key);
return decimal.TryParse(v, out result);
} /// <summary>
/// 在配置文件中根据key取出值并转化为int类型
/// </summary>
/// <param name="key"></param>
/// <returns>返回的值</returns>
public int GetConfigValueInt(string key)
{
var v = GetConfigValue(key);
return int.Parse(v);
} /// <summary>
/// 在配置文件中根据key取出值并转化为bool类型
/// </summary>
/// <param name="key"></param>
/// <returns>返回的值</returns>
public bool GetConfigValueBool(string key)
{
var v = GetConfigValue(key);
return bool.Parse(v);
} /// <summary>
/// 在配置文件中根据key取出值并转化为float类型
/// </summary>
/// <param name="key"></param>
/// <returns>返回的值</returns>
public float GetConfigValueFloat(string key)
{
var v = GetConfigValue(key);
return float.Parse(v);
} /// <summary>
/// 在配置文件中根据key取出值并转化为double类型
/// </summary>
/// <param name="key"></param>
/// <returns>返回的值</returns>
public double GetConfigValueDouble(string key)
{
var v = GetConfigValue(key);
return double.Parse(v);
} /// <summary>
/// 在配置文件中根据key取出值并转化为DateTime类型
/// </summary>
/// <param name="key"></param>
/// <returns>返回的值</returns>
public DateTime GetConfigValueDateTime(string key)
{
var v = GetConfigValue(key);
return DateTime.Parse(v);
} /// <summary>
/// 在配置文件中根据key取出值并转化为decimal类型
/// </summary>
/// <param name="key"></param>
/// <returns>返回的值</returns>
public decimal GetConfigValueDecimal(string key)
{
var v = GetConfigValue(key);
return decimal.Parse(v);
} /// <summary>
/// 修改Key对应的值,如果Key不存在则添加后存入值
/// </summary>
/// <param name="key">Key</param>
/// <param name="value">要存入的值</param>
public void AddOrSetConfigValue(string key, string value)
{
AddOrSetKeyValue(configBasePath, key, value);
} /// <summary>
/// 保存key/value键值对,对于非string类型会调用ToString()方法
/// </summary>
/// <typeparam name="T">要保存的值的类型</typeparam>
/// <param name="key">要保存的键名</param>
/// <param name="value">要保存的值</param>
public void AddOrSetConfigValue<T>(string key, T value)
{
var v = value.ToString();
AddOrSetConfigValue(key, v);
} /// <summary>
/// 保存key/value键值对
/// </summary>
/// <param name="basePath">要保存的根节点路径</param>
/// <param name="key">要保存的键名</param>
/// <param name="value">要保存的值</param>
public void AddOrSetKeyValue(string basePath, string key, string value)
{
var doc = GetXmlDocument();
var node = doc.SelectSingleNode($"{basePath}/{key}");
if (node == null)
{
node = doc.CreateElement(key);
doc.SelectSingleNode(basePath).AppendChild(node);
}
node.InnerText = value;
doc.Save(FileName);
} /// <summary>
/// 根据xpath获取值
/// </summary>
/// <param name="xpath">要获取的路径</param>
/// <returns>获取的值</returns>
public string GetKeyValue(string xpath)
{
var doc = GetXmlDocument();
var node = doc.SelectSingleNode(xpath);
return node?.InnerText ?? "";
} /// <summary>
/// 删除Key以及对应的值
/// </summary>
/// <param name="key">Key</param>
public void DeleteConfigKey(string key)
{
var doc = GetXmlDocument();
var node = doc.SelectSingleNode($"{configBasePath}/{key}");
if (node == null) return;
doc.SelectSingleNode("Root/Config")?.RemoveChild(node);
doc.Save(FileName);
} /// <summary>
/// 读取XML文档
/// </summary>
/// <returns></returns>
private XmlDocument GetXmlDocument()
{
var doc = new XmlDocument();
doc.Load(FileName);
return doc;
}
}

xml配置文件 操作的更多相关文章

  1. 配置文件操作(ini、cfg、xml、config等格式)

    配置文件的格式主要有ini.xml.config等,现在对这些格式的配置文件的操作(C#)进行简单说明. INI配置文件操作 调用系统函数GetPrivateProfileString()和Write ...

  2. Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)

    Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...

  3. C#操作XML配置文件

    代码为C#操作xml配置文件的范例类,函数SetValue用于向配置文件写入一个值,GetValue用于根据Key获取相应值。这种方法的配置文件不需要手动创建,程序在运行后会自动处理创建。 注意:1. ...

  4. Service系统服务(一):安装一个KVM服务器、KVM平台构建及简单管理、virsh基本管理操作、xml配置文件的应用、为虚拟机制作快照备份、快建新虚拟机

    一.安装一个KVM服务器 目标: 本例要求准备一台 RHEL7.2 服务器,将其搭建为KVM平台,主要完成下列操作: 1> 关闭本机的SELinux保护.防火墙服务   2> 挂载RHEL ...

  5. Spring中c3p0连接池的配置 及JdbcTemplate的使用 通过XML配置文件注入各种需要对象的操作 来完成数据库添加Add()方法

    通过配置文件XML方法的配置 可以使用非常简练的Service类 UserService类代码如下: package com.swift; public class UserService { pri ...

  6. Spring 通过XML配置文件以及通过注解形式来AOP 来实现前置,环绕,异常通知,返回后通知,后通知

    本节主要内容: 一.Spring 通过XML配置文件形式来AOP 来实现前置,环绕,异常通知     1. Spring AOP  前置通知 XML配置使用案例     2. Spring AOP   ...

  7. 将所有程序设置XML集中到一个单独XML配置文件的方法:使用appSettings元素的configSource元素

    在.NET程序中,程序的配置文件默认都会放在程序根目录下的web.config(网站程序)或App.config(控制台等程序),在该配置文件中可以定义若干程序配置信息. 在此以网站程序为例,首先将下 ...

  8. 【XML配置文件读取】使用jdom读取XML配置文件信息

    在项目中我们经常需要将配置信息写在配置文件中,而XML配置文件是常用的格式. 下面将介绍如何通过jdom来读取xml配置文件信息. 配置文件信息 <?xml version="1.0& ...

  9. [drp 3]读取Xml配置文件,连接数据库

    导读:之前看一本XML的书,里面说到了对于XML的操作问题,但由于各方面的原因,一直没有总结.这次借着做项目,就总结总结对于XML文件的利用.主要是从配置数据库连接和保存数据这两方面来的.这篇博客介绍 ...

随机推荐

  1. Java实现二叉树地遍历、求深度和叶子结点的个数

    一.分析 二叉树是n个结点所构成的集合,它或为空树,或为非空树.对于非空树,它有且仅有一个根结点,且除根结点以外的其余结点分为两个互不相交的子集,分别称为左子树和右子树,它们本身又都是二叉树. 显而易 ...

  2. python-面向对象速查表-内置方法-内置函数-内置属性(只整理了部分内容)

    今日临时总结的内容,可能还有些不正确的地方,初步当做个速查表吧. 类的内置函数(继承object的,自己重写) 内置函数 执行时机 注意点 调用案例 __init__ 实例化对象时 不允许写返回值(r ...

  3. T100——按xls格式批量导入数据

    弹出File Browser窗口 PRIVATE FUNCTION cxrt020_open_file() DEFINE l_dir LIKE type_t.chr500 DEFINE r_succe ...

  4. 贝叶斯线性回归(Bayesian Linear Regression)

    贝叶斯线性回归(Bayesian Linear Regression) 2016年06月21日 09:50:40 Duanxx 阅读数 54254更多 分类专栏: 监督学习   版权声明:本文为博主原 ...

  5. HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)

    引言:我们都知道HashSet这个类有add   remove   contains方法,但是我们要深刻理解到底是怎么判断它是否重复加入了,什么时候才移除,什么时候才算是包括????????? add ...

  6. C#键盘事件

    一: protected override void OnKeyDown(KeyEventArgs e) { if (e.Key==Key.Enter) { sendAppToServer(); } ...

  7. O039、Unshelve Instance 操作详解

    参考https://www.cnblogs.com/CloudMan6/p/5529915.html   上一节我们 shelve Instance 到 Glance,本节学习如何通过 unshelv ...

  8. ztree树id、pid转成children格式的(待整理完整)

    山铝菜单 因为菜单选用了bootstrap treeview ,而格式需要是children类似的格式 var nodes = [ {name: "父节点1", children: ...

  9. Angular 开发环境搭建

    Angular 是一款开源 JavaScript 框架,由Google 维护,用来协助单一页面应用程序运行的.它的目标是增强基于浏览器的应用,使开发和测试变得更加容易.目前最新的 Angular 版本 ...

  10. idea中安装git后,代码颜色代表的含义

    idea中安装git以后,代码文件出现了不同的颜色 它们分别表示的含义: 绿色,已经加入控制暂未提交 红色,未加入版本控制 蓝色,加入,已提交,有改动 白色,加入,已提交,无改动 灰色:版本控制已忽略 ...