xml配置文件 操作
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配置文件 操作的更多相关文章
- 配置文件操作(ini、cfg、xml、config等格式)
配置文件的格式主要有ini.xml.config等,现在对这些格式的配置文件的操作(C#)进行简单说明. INI配置文件操作 调用系统函数GetPrivateProfileString()和Write ...
- Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)
Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...
- C#操作XML配置文件
代码为C#操作xml配置文件的范例类,函数SetValue用于向配置文件写入一个值,GetValue用于根据Key获取相应值。这种方法的配置文件不需要手动创建,程序在运行后会自动处理创建。 注意:1. ...
- Service系统服务(一):安装一个KVM服务器、KVM平台构建及简单管理、virsh基本管理操作、xml配置文件的应用、为虚拟机制作快照备份、快建新虚拟机
一.安装一个KVM服务器 目标: 本例要求准备一台 RHEL7.2 服务器,将其搭建为KVM平台,主要完成下列操作: 1> 关闭本机的SELinux保护.防火墙服务 2> 挂载RHEL ...
- Spring中c3p0连接池的配置 及JdbcTemplate的使用 通过XML配置文件注入各种需要对象的操作 来完成数据库添加Add()方法
通过配置文件XML方法的配置 可以使用非常简练的Service类 UserService类代码如下: package com.swift; public class UserService { pri ...
- Spring 通过XML配置文件以及通过注解形式来AOP 来实现前置,环绕,异常通知,返回后通知,后通知
本节主要内容: 一.Spring 通过XML配置文件形式来AOP 来实现前置,环绕,异常通知 1. Spring AOP 前置通知 XML配置使用案例 2. Spring AOP ...
- 将所有程序设置XML集中到一个单独XML配置文件的方法:使用appSettings元素的configSource元素
在.NET程序中,程序的配置文件默认都会放在程序根目录下的web.config(网站程序)或App.config(控制台等程序),在该配置文件中可以定义若干程序配置信息. 在此以网站程序为例,首先将下 ...
- 【XML配置文件读取】使用jdom读取XML配置文件信息
在项目中我们经常需要将配置信息写在配置文件中,而XML配置文件是常用的格式. 下面将介绍如何通过jdom来读取xml配置文件信息. 配置文件信息 <?xml version="1.0& ...
- [drp 3]读取Xml配置文件,连接数据库
导读:之前看一本XML的书,里面说到了对于XML的操作问题,但由于各方面的原因,一直没有总结.这次借着做项目,就总结总结对于XML文件的利用.主要是从配置数据库连接和保存数据这两方面来的.这篇博客介绍 ...
随机推荐
- Java实现二叉树地遍历、求深度和叶子结点的个数
一.分析 二叉树是n个结点所构成的集合,它或为空树,或为非空树.对于非空树,它有且仅有一个根结点,且除根结点以外的其余结点分为两个互不相交的子集,分别称为左子树和右子树,它们本身又都是二叉树. 显而易 ...
- python-面向对象速查表-内置方法-内置函数-内置属性(只整理了部分内容)
今日临时总结的内容,可能还有些不正确的地方,初步当做个速查表吧. 类的内置函数(继承object的,自己重写) 内置函数 执行时机 注意点 调用案例 __init__ 实例化对象时 不允许写返回值(r ...
- T100——按xls格式批量导入数据
弹出File Browser窗口 PRIVATE FUNCTION cxrt020_open_file() DEFINE l_dir LIKE type_t.chr500 DEFINE r_succe ...
- 贝叶斯线性回归(Bayesian Linear Regression)
贝叶斯线性回归(Bayesian Linear Regression) 2016年06月21日 09:50:40 Duanxx 阅读数 54254更多 分类专栏: 监督学习 版权声明:本文为博主原 ...
- HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)
引言:我们都知道HashSet这个类有add remove contains方法,但是我们要深刻理解到底是怎么判断它是否重复加入了,什么时候才移除,什么时候才算是包括????????? add ...
- C#键盘事件
一: protected override void OnKeyDown(KeyEventArgs e) { if (e.Key==Key.Enter) { sendAppToServer(); } ...
- O039、Unshelve Instance 操作详解
参考https://www.cnblogs.com/CloudMan6/p/5529915.html 上一节我们 shelve Instance 到 Glance,本节学习如何通过 unshelv ...
- ztree树id、pid转成children格式的(待整理完整)
山铝菜单 因为菜单选用了bootstrap treeview ,而格式需要是children类似的格式 var nodes = [ {name: "父节点1", children: ...
- Angular 开发环境搭建
Angular 是一款开源 JavaScript 框架,由Google 维护,用来协助单一页面应用程序运行的.它的目标是增强基于浏览器的应用,使开发和测试变得更加容易.目前最新的 Angular 版本 ...
- idea中安装git后,代码颜色代表的含义
idea中安装git以后,代码文件出现了不同的颜色 它们分别表示的含义: 绿色,已经加入控制暂未提交 红色,未加入版本控制 蓝色,加入,已提交,有改动 白色,加入,已提交,无改动 灰色:版本控制已忽略 ...