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. oracle建表详细信息

    一张用户表 -- Create table create table OA_DM.DM_GY_USER ( ), username ) not null, loginname ) not null, ...

  2. spring boot 学习笔记(三)之 配置

    一:概述 在Spring boot 中根据业务需求,我们往往会在不同地方配置我们所需的key-value 配置项,配置文件存在不同的地方的场景如下: (1) 默认存在 application.prop ...

  3. 【opencv源码解析】 二、 cvtColor

    这里以CV_BGR2YUV_I420来讲 1. opencv244 core.cpp void cv::cvtColor( InputArray _src, OutputArray _dst, int ...

  4. Spring整合Hessian的使用

    该文章转赞自  https://www.cnblogs.com/ontheroad_lee/p/3797239.htm 个人感觉写的非常好,刚学习,先记录下来 1.1     Hessian简介 He ...

  5. yii2-cache组件第三个参数Dependency $dependency的作用浅析

    用法如下: $cache->set($key, $result, Configs::instance()->cacheDuration, new TagDependency([ 'tags ...

  6. JavaWeb【二、Tomcat安装】

    简版: 下载安装 http://tomcat.apache.org/download-80.cgi 环境变量 CATALINA_HOME-tomcat安装路径-[E:\apache-tomcat-8. ...

  7. Linux下Mysql 不能访问新数据文件夹问题

    新挂载的盘,打算将数据文件夹配置到 /data/mysql,却无法启动mysqld. 除了将目录授权给mysql用户和组以外 chown -R mysql:mysql /data/mysql 太需要将 ...

  8. 《python解释器源码剖析》第10章--python虚拟机中的一般表达式

    10.0 序 上一章中,我们通过PyEval_EvalFrameEx看到了python虚拟机的整体框架,那么这一章我们将深入到PyEval_EvalFrameEx的各个细节当中,深入剖析python的 ...

  9. 理解函数声明--signal函数的声明

    1.显示调用首地址为0的例程:(*(void(*)())0)() 显示调用首地址为0的例程的表达式为:(*(void(*)())0)() 分两步分析: 假定变量fp是一个函数指针,调用方法如下:(*f ...

  10. deep_learning_Function_np.newaxis参数理解

    功能:np.newaxis是用来给数组a增加维度的格式:a[np.newaxis和:的组合],如a[:,np.newaxis],a[np.newaxis, np.newaxis, :]详解:np.ne ...