在开发中经常会用到各种kv类型的配置 文件,像这样的

<?xml version="1.0" encoding="utf-8" ?>
<source>
<item id="101" value="1125"/>
<item id="102" value="413"/>
<item id="103" value="181"/>
<item id="104" value="1642"/>
<item id="105" value="926"/>
<item id="106" value="1088"/>
<item id="107" value="1243"/>
</source>

那么我们可以用一个辅助类来很好的解决哦

  public class XMLSourceHelp
{
/// <summary>
/// XML数据文件数据列表
/// </summary>
private static Dictionary<EXMLDataSource, DataTable> XmlDataSourceList = null; /// <summary>
/// XML数据文件枚举
/// </summary>
public enum EXMLDataSource
{
/// <summary>
/// ModuleTypeIconSource文件
/// </summary>
ModuleTypeIconSource = ,
/// <summary>
/// ModuleTypeSource文件
/// </summary>
ModuleTypeSource = ,
/// <summary>
/// SourceTypeFile文件
/// </summary>
SourceTypeFile = ,
/// <summary>
/// FeedBack文件
/// </summary>
FeedBack = ,
/// <summary>
/// QueryBracket文件
/// </summary>
QueryBracket = ,
/// <summary>
/// QueryLogicOperator文件
/// </summary>
QueryLogicOperator = ,
/// <summary>
/// QueryModule文件
/// </summary>
QueryModule = ,
/// <summary>
/// QueryOperator文件
/// </summary>
QueryOperator = ,
/// <summary>
/// QuerySelectModule文件
/// </summary>
QuerySelectModule = ,
/// <summary>
/// 反射参数配置
/// </summary>
ParaConfig=,
/// <summary>
/// 任务类型对应反射类型标记量
/// </summary>
SourceDllIndex = ,
/// <summary>
/// 北京消息队列文件
/// </summary>
Lightweight=
} /// <summary>
/// 本类实例对象
/// </summary>
private static XMLSourceHelp m_sh; /// <summary>
/// XML数据文件数据辅助类
/// </summary>
public static XMLSourceHelp SH
{
get
{
if (m_sh == null)
m_sh = new XMLSourceHelp();
return XMLSourceHelp.m_sh;
}
private set { XMLSourceHelp.m_sh = value; }
} /// <summary>
/// 功能描述:获取数据对象
/// 作  者:huangzh
/// 创建日期:2015-10-10 17:47:45
/// 任务编号:
/// </summary>
/// <param name="file">file</param>
/// <returns>返回值</returns>
public DataTable GetSource(EXMLDataSource file)
{
if (XmlDataSourceList == null)
return null;
DataTable dt = new DataTable();
XmlDataSourceList.TryGetValue(file, out dt);
return dt.Copy();
} /// <summary>
/// 功能描述:加载数据
/// 作  者:huangzh
/// 创建日期:2015-10-10 17:48:32
/// 任务编号:
/// </summary>
public void LoadSource()
{
if (XmlDataSourceList == null)
{
string strServerPath = AppDomain.CurrentDomain.BaseDirectory;
XmlDataSourceList = new Dictionary<EXMLDataSource, DataTable>();
foreach (EXMLDataSource item in Enum.GetValues(typeof(EXMLDataSource)))
{
XmlDataSourceList.Add(item, LoadXmlInfo(strServerPath + "Data\\" + item + ".xml"));
}
}
} /// <summary>
/// 转换数字码为中文名
/// </summary>
/// <param name="objId">Id数字码</param>
/// <param name="item">文件</param>
/// <returns>返回转换后的名字</returns>
public string ConvertIdToName(object objId, EXMLDataSource file)
{
if (objId == null || string.IsNullOrWhiteSpace(objId.ToString()))
{
return string.Empty;
} DataTable dtSource = GetSource(file); if (dtSource == null)
{
return string.Empty;
}
var names = from item in dtSource.AsEnumerable()
where item.Field<string>("id") == objId.ToString()
select item.Field<string>("value");
if (names == null || names.Count() <= )
return "";
return names.First();
} /// <summary>
/// 功能描述:构造方法
/// 作  者:huangzh
/// 创建日期:2015-09-25 09:09:26
/// 任务编号:
/// </summary>
private XMLSourceHelp()
{
} /// <summary>
/// 加载XML信息
/// </summary>
/// <param name="strPath">文件路径</param>
/// <returns>返回Xml信息数据表</returns>
private DataTable LoadXmlInfo(string strPath)
{
DataTable dt = CreateDt();
GetSourceByFile(strPath, ref dt);
return dt;
} /// <summary>
/// 功能描述:读取数据
/// 作  者:huangzh
/// 创建日期:2015-09-25 09:28:43
/// 任务编号:
/// </summary>
/// <param name="strFile">strFile</param>
/// <param name="dt">dt</param>
private void GetSourceByFile(string strFile, ref DataTable dt)
{
XmlDocument document = new XmlDocument();
document.Load(strFile);
XmlNodeList nodelist = document.SelectSingleNode("/source").ChildNodes;
foreach (XmlNode xn in nodelist)
{
if (xn.NodeType == XmlNodeType.Element)
{
DataRow dr = dt.NewRow();
dr[] = xn.Attributes["id"].Value;
dr[] = xn.Attributes["value"].Value;
dt.Rows.Add(dr);
}
}
} /// <summary>
/// 功能描述:创建一个DataTable
/// 作  者:huangzh
/// 创建日期:2015-09-25 09:28:08
/// 任务编号:
/// </summary>
/// <returns>返回值</returns>
private DataTable CreateDt()
{
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(string));
dt.Columns.Add("value", typeof(string));
return dt;
} /// <summary>
/// 功能描述:返回指定ID的对应序列号
/// 作  者:huangzh
/// 创建日期:2015-10-12 17:34:40
/// 任务编号:
/// </summary>
/// <param name="objid">objid</param>
/// <param name="EXMLDataSource">文件</param>
/// <returns>返回值</returns>
public int GetIndexById(object objid, EXMLDataSource file)
{
DataTable dtSource = GetSource(file);
return ZhuoYueE.Dop.Web.Base.ProEnv.GetIndexInTableByField(dtSource, "id", objid.ToString());
} /// <summary>
/// 功能描述:返回指定Value的对应的第一个序列号
/// 作  者:huangzh
/// 创建日期:2015-10-12 17:35:50
/// 任务编号:
/// </summary>
/// <param name="strValue">strValue</param>
/// <param name="t">t</param>
/// <returns>返回值</returns>
public int GetIndexByValue(string strValue, EXMLDataSource file)
{
DataTable dtSource = GetSource(file);
return ZhuoYueE.Dop.Web.Base.ProEnv.GetIndexInTableByField(dtSource, "value", strValue);
} /// <summary>
/// 修改XML的一个键值
/// </summary>
/// <param name="objid">objid</param>
/// <param name="strValue">值</param>
/// <param name="file">文件</param>
public void ModifyValueById(object objid, string strValue, EXMLDataSource file)
{
string strServerPath = AppDomain.CurrentDomain.BaseDirectory;
strServerPath = strServerPath.Substring(, strServerPath.Length - );
var names = from item in GetSource(file).AsEnumerable()
where item.Field<string>("id") == objid.ToString()
select item.Field<string>("value");
if (names != null && names.Count() == )
{
XmlDocument document = new XmlDocument();
document.Load(strServerPath + "\\data\\" + file + ".xml");
XmlNodeList nodelist = document.SelectSingleNode("/source").ChildNodes;
foreach (XmlNode xn in nodelist)
{
if (xn.NodeType == XmlNodeType.Element)
{
if (xn.Attributes["id"].Value == objid.ToString())
{
xn.Attributes["value"].Value = strValue;
break;
}
}
}
document.Save(strServerPath + "\\data\\" + file + ".xml");
}
else
{ XmlDocument document = new XmlDocument();
document.Load(strServerPath + "\\data\\" + file + ".xml");
XmlNode xn = document.SelectSingleNode("/source");
XmlNode xnNew = document.CreateNode(XmlNodeType.Element, "item", null);
XmlAttribute attId = document.CreateAttribute("id");
attId.Value = objid.ToString();
XmlAttribute attvalue = document.CreateAttribute("value");
attvalue.Value = strValue;
xnNew.Attributes.Append(attId);
xnNew.Attributes.Append(attvalue);
xn.AppendChild(xnNew);
document.Save(strServerPath + "\\data\\" + file + ".xml");
}
if (XmlDataSourceList.ContainsKey(file))
{
XmlDataSourceList[file] = LoadXmlInfo(strServerPath + "\\Data\\" + file + ".xml");
}
else
{
XmlDataSourceList.Add(file, LoadXmlInfo(strServerPath + "\\Data\\" + file + ".xml"));
}
}
}

其中“EXMLDataSource”就是配置文件名的枚举了。

这个辅助类提供增改查功能,使用方便。只需要这么调用就可以了

XMLSourceHelp.SH.ConvertIdToName("101", XMLSourceHelp.EXMLDataSource.Lightweight);

c#XML配置文件辅助类的更多相关文章

  1. Mybatis 源码分析--Configuration.xml配置文件加载到内存

    (补充知识点: 1 byte(字节)=8 bit(位) 通常一个标准英文字母占一个字节位置,一个标准汉字占两个字节位置:字符的例子有:字母.数字系统或标点符号) 1.创建SqlSessionFacto ...

  2. 转-springAOP基于XML配置文件方式

    springAOP基于XML配置文件方式 时间 2014-03-28 20:11:12  CSDN博客 原文  http://blog.csdn.net/yantingmei/article/deta ...

  3. xml 配置文件规范 校验

    背景:做的数据同步框架,数据同步种类通过xml配置文件添加.为了系统的稳定性,我们只能认为将来写这个运行配置xml的人是一个傻瓜,那么对xml格式校验就很重要. 通过dom4j,是可以完成对xml格式 ...

  4. Spring中加载xml配置文件的六种方式

    Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog  因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...

  5. 史上最全web.xml配置文件元素详解

    一.web.xml配置文件常用元素及其意义预览 <web-app> <!--定义了WEB应用的名字--> <display-name></display-na ...

  6. Spring XML配置文件示例(二)——web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" ...

  7. hibernate.cfg.xml配置文件和hbm.xml配置文件

    http://blog.sina.com.cn/s/blog_a7b8ab2801014m0e.html hibernate.cfg.xml配置文件格式 <?xml version=" ...

  8. struts2中struts.xml配置文件详解【未整理】

    1.    深入Struts2的配置文件 本部分主要介绍struts.xml的常用配置. 1.1.    包配置: Struts2框架中核心组件就是Action.拦截器等,Struts2框架使用包来管 ...

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

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

随机推荐

  1. JS如何判断包括IE11在内的IE浏览器

    原文:JS如何判断包括IE11在内的IE浏览器 今天碰到一个奇怪的问题,有一个页面,想指定用IE浏览器打开,在VS开发环境没有问题,但部署到服务器上,即使是用IE打开页面,还是提示"仅支持I ...

  2. 蓝桥杯 BASIC 27 矩阵乘法(矩阵、二维数组)

    [思路]:注意0次幂是单位矩阵. [AC代码]: #include <iostream> #include <algorithm> #include <iomanip&g ...

  3. iOS8开发~UI布局(二)storyboard中autolayout和size class的使用具体解释

    一.概要:前一篇初步的描写叙述了size class的概念,那么实际中怎样使用呢,以下两个问题是我们一定会遇到的: 1.Xcode6中添加了size class,在storyboard中怎样使用? 2 ...

  4. Beginning Python From Novice to Professional (7) - 类别

    类别 创建一个简单的类: #!/usr/bin/env python __metaclass__ = type class Person: def setName(self,name): self.n ...

  5. ASP.NET——RequiredFieldValidator控制和ValidationSummary控制

    我们的登录页面,忘记承担损失password然后username,该页面将永远是一个小提醒. 那么我们在网也制作的时候怎样实现这一功能呢?这就用到了RequiredFieldValidator控件和V ...

  6. 透过【百度地图API】分析双闭包问题

    原文:透过[百度地图API]分析双闭包问题 摘要: 有位API爱好者问到,昨天的教程里为什么不使用for循环?他使用for循环后,也发现代码无效.这是什么原因? ------------------- ...

  7. iframe的各项參数

    iframe的各项參数: <iframe src="test.jsp" width="100″ height="50″ frameborder=" ...

  8. 【软测试】(两)计算机组成原理-cpu

    cpu,中文名称中央处理单元,central processing unit.系统的核心,用于数据的处理,算术以及逻辑运算和控制程序的运行. 组成 运算器 从字面上就能够理解到.运算器主要用来对于逻辑 ...

  9. Robotium源码分析之Instrumentation进阶-attach

    在分析Robotium的运行原理之前,我们有必要先搞清楚Instrumentation的一些相关知识点,因为Robotium就是基于Instrumentation而开发出来的一套自动化测试框架.鉴于之 ...

  10. 快速构建Windows 8风格应用6-GridView数据控件

    原文:快速构建Windows 8风格应用6-GridView数据控件 本篇博文主要介绍什么是GridView数据控件.如何构建常用的GridView数据呈现样式. 什么是GridView数据控件? G ...