c#XML配置文件辅助类

在开发中经常会用到各种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>

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

  1  public class XMLSourceHelp
  2     {
  3         /// <summary>
  4         /// XML数据文件数据列表
  5         /// </summary>
  6         private static Dictionary<EXMLDataSource, DataTable> XmlDataSourceList = null;
  7
  8         /// <summary>
  9         /// XML数据文件枚举
 10         /// </summary>
 11         public enum EXMLDataSource
 12         {
 13             /// <summary>
 14             /// ModuleTypeIconSource文件
 15             /// </summary>
 16             ModuleTypeIconSource = 0,
 17             /// <summary>
 18             /// ModuleTypeSource文件
 19             /// </summary>
 20             ModuleTypeSource = 1,
 21             /// <summary>
 22             /// SourceTypeFile文件
 23             /// </summary>
 24             SourceTypeFile = 2,
 25             /// <summary>
 26             /// FeedBack文件
 27             /// </summary>
 28             FeedBack = 3,
 29             /// <summary>
 30             /// QueryBracket文件
 31             /// </summary>
 32             QueryBracket = 4,
 33             /// <summary>
 34             /// QueryLogicOperator文件
 35             /// </summary>
 36             QueryLogicOperator = 5,
 37             /// <summary>
 38             /// QueryModule文件
 39             /// </summary>
 40             QueryModule = 6,
 41             /// <summary>
 42             /// QueryOperator文件
 43             /// </summary>
 44             QueryOperator = 7,
 45             /// <summary>
 46             /// QuerySelectModule文件
 47             /// </summary>
 48             QuerySelectModule = 8,
 49             /// <summary>
 50             /// 反射参数配置
 51             /// </summary>
 52             ParaConfig=9,
 53             /// <summary>
 54             /// 任务类型对应反射类型标记量
 55             /// </summary>
 56             SourceDllIndex = 10,
 57             /// <summary>
 58             /// 北京消息队列文件
 59             /// </summary>
 60             Lightweight=11
 61         }
 62
 63         /// <summary>
 64         /// 本类实例对象
 65         /// </summary>
 66         private static XMLSourceHelp m_sh;
 67
 68         /// <summary>
 69         /// XML数据文件数据辅助类
 70         /// </summary>
 71         public static XMLSourceHelp SH
 72         {
 73             get
 74             {
 75                 if (m_sh == null)
 76                     m_sh = new XMLSourceHelp();
 77                 return XMLSourceHelp.m_sh;
 78             }
 79             private set { XMLSourceHelp.m_sh = value; }
 80         }
 81
 82         /// <summary>
 83         /// 功能描述:获取数据对象
 84         /// 作  者:huangzh
 85         /// 创建日期:2015-10-10 17:47:45
 86         /// 任务编号:
 87         /// </summary>
 88         /// <param name="file">file</param>
 89         /// <returns>返回值</returns>
 90         public DataTable GetSource(EXMLDataSource file)
 91         {
 92             if (XmlDataSourceList == null)
 93                 return null;
 94             DataTable dt = new DataTable();
 95             XmlDataSourceList.TryGetValue(file, out dt);
 96             return dt.Copy();
 97         }
 98
 99         /// <summary>
100         /// 功能描述:加载数据
101         /// 作  者:huangzh
102         /// 创建日期:2015-10-10 17:48:32
103         /// 任务编号:
104         /// </summary>
105         public void LoadSource()
106         {
107             if (XmlDataSourceList == null)
108             {
109                 string strServerPath = AppDomain.CurrentDomain.BaseDirectory;
110                 XmlDataSourceList = new Dictionary<EXMLDataSource, DataTable>();
111                 foreach (EXMLDataSource item in Enum.GetValues(typeof(EXMLDataSource)))
112                 {
113                     XmlDataSourceList.Add(item, LoadXmlInfo(strServerPath + "Data\\" + item + ".xml"));
114                 }
115             }
116         }
117
118         /// <summary>
119         /// 转换数字码为中文名
120         /// </summary>
121         /// <param name="objId">Id数字码</param>
122         /// <param name="item">文件</param>
123         /// <returns>返回转换后的名字</returns>
124         public string ConvertIdToName(object objId, EXMLDataSource file)
125         {
126             if (objId == null || string.IsNullOrWhiteSpace(objId.ToString()))
127             {
128                 return string.Empty;
129             }
130
131             DataTable dtSource = GetSource(file);
132
133             if (dtSource == null)
134             {
135                 return string.Empty;
136             }
137             var names = from item in dtSource.AsEnumerable()
138                         where item.Field<string>("id") == objId.ToString()
139                         select item.Field<string>("value");
140             if (names == null || names.Count() <= 0)
141                 return "";
142             return names.First();
143         }
144
145         /// <summary>
146         /// 功能描述:构造方法
147         /// 作  者:huangzh
148         /// 创建日期:2015-09-25 09:09:26
149         /// 任务编号:
150         /// </summary>
151         private XMLSourceHelp()
152         {
153         }
154
155         /// <summary>
156         /// 加载XML信息
157         /// </summary>
158         /// <param name="strPath">文件路径</param>
159         /// <returns>返回Xml信息数据表</returns>
160         private DataTable LoadXmlInfo(string strPath)
161         {
162             DataTable dt = CreateDt();
163             GetSourceByFile(strPath, ref dt);
164             return dt;
165         }
166
167         /// <summary>
168         /// 功能描述:读取数据
169         /// 作  者:huangzh
170         /// 创建日期:2015-09-25 09:28:43
171         /// 任务编号:
172         /// </summary>
173         /// <param name="strFile">strFile</param>
174         /// <param name="dt">dt</param>
175         private void GetSourceByFile(string strFile, ref DataTable dt)
176         {
177             XmlDocument document = new XmlDocument();
178             document.Load(strFile);
179             XmlNodeList nodelist = document.SelectSingleNode("/source").ChildNodes;
180             foreach (XmlNode xn in nodelist)
181             {
182                 if (xn.NodeType == XmlNodeType.Element)
183                 {
184                     DataRow dr = dt.NewRow();
185                     dr[0] = xn.Attributes["id"].Value;
186                     dr[1] = xn.Attributes["value"].Value;
187                     dt.Rows.Add(dr);
188                 }
189             }
190         }
191
192         /// <summary>
193         /// 功能描述:创建一个DataTable
194         /// 作  者:huangzh
195         /// 创建日期:2015-09-25 09:28:08
196         /// 任务编号:
197         /// </summary>
198         /// <returns>返回值</returns>
199         private DataTable CreateDt()
200         {
201             DataTable dt = new DataTable();
202             dt.Columns.Add("id", typeof(string));
203             dt.Columns.Add("value", typeof(string));
204             return dt;
205         }
206
207
208         /// <summary>
209         /// 功能描述:返回指定ID的对应序列号
210         /// 作  者:huangzh
211         /// 创建日期:2015-10-12 17:34:40
212         /// 任务编号:
213         /// </summary>
214         /// <param name="objid">objid</param>
215         /// <param name="EXMLDataSource">文件</param>
216         /// <returns>返回值</returns>
217         public int GetIndexById(object objid, EXMLDataSource file)
218         {
219             DataTable dtSource = GetSource(file);
220             return ZhuoYueE.Dop.Web.Base.ProEnv.GetIndexInTableByField(dtSource, "id", objid.ToString());
221         }
222
223         /// <summary>
224         /// 功能描述:返回指定Value的对应的第一个序列号
225         /// 作  者:huangzh
226         /// 创建日期:2015-10-12 17:35:50
227         /// 任务编号:
228         /// </summary>
229         /// <param name="strValue">strValue</param>
230         /// <param name="t">t</param>
231         /// <returns>返回值</returns>
232         public int GetIndexByValue(string strValue, EXMLDataSource file)
233         {
234             DataTable dtSource = GetSource(file);
235             return ZhuoYueE.Dop.Web.Base.ProEnv.GetIndexInTableByField(dtSource, "value", strValue);
236         }
237
238         /// <summary>
239         /// 修改XML的一个键值
240         /// </summary>
241         /// <param name="objid">objid</param>
242         /// <param name="strValue">值</param>
243         /// <param name="file">文件</param>
244         public void ModifyValueById(object objid, string strValue, EXMLDataSource file)
245         {
246             string strServerPath = AppDomain.CurrentDomain.BaseDirectory;
247             strServerPath = strServerPath.Substring(0, strServerPath.Length - 1);
248             var names = from item in GetSource(file).AsEnumerable()
249                         where item.Field<string>("id") == objid.ToString()
250                         select item.Field<string>("value");
251             if (names != null && names.Count() == 1)
252             {
253                 XmlDocument document = new XmlDocument();
254                 document.Load(strServerPath + "\\data\\" + file + ".xml");
255                 XmlNodeList nodelist = document.SelectSingleNode("/source").ChildNodes;
256                 foreach (XmlNode xn in nodelist)
257                 {
258                     if (xn.NodeType == XmlNodeType.Element)
259                     {
260                         if (xn.Attributes["id"].Value == objid.ToString())
261                         {
262                             xn.Attributes["value"].Value = strValue;
263                             break;
264                         }
265                     }
266                 }
267                 document.Save(strServerPath + "\\data\\" + file + ".xml");
268             }
269             else
270             {
271
272                 XmlDocument document = new XmlDocument();
273                 document.Load(strServerPath + "\\data\\" + file + ".xml");
274                 XmlNode xn = document.SelectSingleNode("/source");
275                 XmlNode xnNew = document.CreateNode(XmlNodeType.Element, "item", null);
276                 XmlAttribute attId = document.CreateAttribute("id");
277                 attId.Value = objid.ToString();
278                 XmlAttribute attvalue = document.CreateAttribute("value");
279                 attvalue.Value = strValue;
280                 xnNew.Attributes.Append(attId);
281                 xnNew.Attributes.Append(attvalue);
282                 xn.AppendChild(xnNew);
283                 document.Save(strServerPath + "\\data\\" + file + ".xml");
284             }
285             if (XmlDataSourceList.ContainsKey(file))
286             {
287                 XmlDataSourceList[file] = LoadXmlInfo(strServerPath + "\\Data\\" + file + ".xml");
288             }
289             else
290             {
291                 XmlDataSourceList.Add(file, LoadXmlInfo(strServerPath + "\\Data\\" + file + ".xml"));
292             }
293         }
294     }

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

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

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

时间: 2024-10-15 20:56:30

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

struts2中struts.xml配置文件详解

struts.xml的常用配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts

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

在项目中我们经常需要将配置信息写在配置文件中,而XML配置文件是常用的格式. 下面将介绍如何通过jdom来读取xml配置文件信息. 配置文件信息 <?xml version="1.0" encoding="UTF-8"?> <config> <base-config> <stringValue>Hello world</stringValue> <integerValue>8</integ

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

(补充知识点: 1 byte(字节)=8 bit(位) 通常一个标准英文字母占一个字节位置,一个标准汉字占两个字节位置:字符的例子有:字母.数字系统或标点符号) 1.创建SqlSessionFactory ①Reader reader = Resources.getResourceAsReader("mybatis-config.xml");                       //获取mybatis配置文件的字符 注解:Resources类是在mybatis中定义的一个类:g

hibernate.cfg.xml配置文件和hbm.xml配置文件 模板

hibernate.cfg.xml配置文件格式 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration

Java学习-023-Properties 类 XML 配置文件读取及写入源代码

之前的几篇 Properties 文章已经讲述过了 Java 配置文件类 Properties 的基本用法,查看 JDK 的帮助文档时,也可看到在 Properties 类中还有两个方法 loadFromXML(InputStream) 和 storeToXml(OutputStream, String, String),由方法名中的 xml 不难确定这两个方法分别是读取/写入数据到 xml 文件.JDK 文档部分如下所示: 因而此文将通过源码实例演示 Properties 类是如何将数据写入

AndroidManifest.xml配置文件详解 (转)

AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅.下面是一个标准的AndroidManifest.xml文件样例. [html] view plaincopy <?xml version="1.0" encoding="utf-8"?> <manifest> <!-- 基本配置 --> <uses-permission />

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

Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个类,在类中有个方法(非静态的方法),要调用类中的这个方法,则需要创建类的对象,使用对象调用方法.创建类对象的过程,需要new出来对象:而ioc则是将对象的创建不是通过new方式实现,而是交给spring配置来创建对象(即,将对象的创建交给spring来管理): spring是一站式框架 spring

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

因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装入系统,这就需要利用Spring去动态加载某一位置下的配置文件,所以就总结了下Spring中加载xml配置文件的方式,我总结的有6种, xml是最常见的spring 应用系统配置源.Spring中的几种容器都支持使用xml装配bean,包括: XmlBeanFactory,ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,XmlWebApplicati

Spring进阶之路(11)-使用Aspectj切面配置和XML配置文件方式实现切面编程

异常 在使用的时候,遇到了部分的异常,我用的是最新的Spring版本,Spring-4.2.5版本的,首先确保你的配置文件中引入了下面红色部分. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <span style="color:#ff0000;">