zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    web实现rtmp推流拉流(vue + nginx)
    css邊框
    通过IIS操作修改服务器文件没有权限的解决办法
    C#、ASP.NET、WinForm
    阿里云 ECS实例诊断与修复工具,将问题解决周期从24小时缩短至分钟级
    Gartner发布云产品评估报告:阿里云计算能力全球第一
    晓生:这个朋友我交定了!
    从 VMWare 到阿里神龙,虚拟化技术 40 年演进史
    如何在公有云上部署私有云?阿里云专有宿主机轻松搞定
    RHEL6.4安装出现“sda must have a GPT disk label ”解决方法
  • 原文地址:https://www.cnblogs.com/bfyx/p/5391755.html
Copyright © 2011-2022 走看看