标签:
在开发中经常会用到各种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);
标签:
原文地址:http://www.cnblogs.com/bfyx/p/5391755.html