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文件的利用.主要是从配置数据库连接和保存数据这两方面来的.这篇博客介绍 ...
随机推荐
- SetIcon(m_hIcon, TRUE);的作用
SetIcon(m_hIcon, FALSE);// Set small icon 这条语句,程序显示时,左上角就会显示定义了的图标,生成的EXE程序也显示了这个图标 SetIcon(m_hIcon, ...
- ThinkPHP composer的安装,及image图像处理类库的加载
以下教程针对windows系统,示例系统使用win7 composer安装 下载composer安装包,点击安装. 出现'composer choose the command-line php' 要 ...
- txt\excel\cvs\xml存储测试数据
一.目录结构 二.txt存储数据 1.txtData.txt如下: 请您输入手机/邮箱/用户名 请您输入密码 请您输入验证码 2.helper中读取txt数据的代码 def readTXT(self) ...
- k8s-高可用架构设计
docker的私有仓库harbor.容器化kubernetes部分组建.使用阿里云日志服务收集日志. 部署完成后,你将理解系统各组件的交互原理,进而能快速解决实际问题,所以本文档主要适合于那些有一定k ...
- Docker——桥接网络配置
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# ls ifcfg-et ...
- Qt5.8.0编译QtMqtt库并使用该库连接有人云的例子
一 编译QtMqtt库Qt5.10才官方支持MQTT,但我用的Qt版本是5.8.0 Mingw_32BIT, 为了在Qt5.8.0上添加MQTT支持,需要自己编译源码 步骤: (1) git clon ...
- 交替方向乘子法(ADMM)的原理和流程的白话总结
交替方向乘子法(ADMM)的原理和流程的白话总结 2018年08月27日 14:26:42 qauchangqingwei 阅读数 19925更多 分类专栏: 图像处理 作者:大大大的v链接:ht ...
- 【其他】BootCDN
BootCDN 稳定.快速.免费的前端开源项目 CDN 加速服务 是 Bootstrap 中文网支持并维护的前端开源项目免费 CDN 服务,致力于为 Bootstrap.jQuery.Angular. ...
- 防止表单提交时刷新页面-阻止form表单的默认提交行为
最近在写 ajax 提交的时候遇到一个问题,在执行 ajax 提交之后,浏览器页面自动刷新了,主要是没有 由于form 表单的默认提交行为.一下是几种阻止 form 表单默认提交行为的方式. 1.使用 ...
- CSS中为什么有的元素能够设置高度,而有的元素却不能设置高度与宽度?
可以使用{display:block}将内联元素变为块级元素,同时使用{display:inline}将块级元素变为内联元素. {display:inline-block}又是怎么回事,根据张鑫旭老师 ...