基于XML的配置文件访问接口设计和实现(1)

基于XML的配置文件访问接口设计和实现(1)

 

目录

    摘要

    配置文件结构

    XmlConfigReader类的实现

    XmlConfigReader类的使用

 

摘要

    在进行程序开发过程中,经常要将一些程序设置/使用的信息储存起来.由于这些信息和程序的设置/使用相关,与程序有相当的独立性,所以不可能硬编码到程序中.在这个时候我们选择使用基于Xml的配置文件进行存储.Microsoft.NET Framework提供了一系列的基于.Config文件的读取的类,System.Configuration 命名空间提供的AppSettings等类.但是此命名空间提供的类只能对配置文件进行读取,不能进行设置.所以在这里,我们实现自己的一个基于Xml的配置文件的类XmlConfigReader/XmlConfigWriter.

 

 

配置文件的结构

    为了达到与原有的,系统自带的(.Config)配置文件的兼容性,我们选择使用类似.Config 文件的结构.示例如下:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

 <appSettings>

        <add key="TimeOut" value="5000"/>

        <add key="UserName" value="client7" />

        <add key="FileServerPort" value="8050" />

        <add key="SpliteCharsForCMD" value=":"/>

        <add key="SpliteCharsForItem" value=";"/>

        <add key="SpliteCharsForSubItem" value=","/>

</appSettings>

<SockBaseSettings>

         <addd key="ServerIP" value="localhost"/>

</SockBaseSettings>

</configuration>

所有的要设置的信息都放在Configuration节点的子节点(appSettings/SockBaseSettings)的子节点中,这种结构有助于将不同的设置的信息进行归类/统一.结构和系统的.Config结构基本类似.这样就可以很方便的将此自定义的结构转为.Config文件.

 

XmlConfigReader类的实现

     现在文件的基本结构已完成了,现在就开始编码,完成XmlConfigReader.

    由于配置文件是以文件的形式放在硬盘上面的,所以这个XmlConfigReader类在解析Xml文件前得得到文件的路径.

     public class XmlConfigReader

     {

         private string _filepath;

    

         public XmlConfigReader(string filepath){

              _filepath = Path.GetFullPath(filepath).ToUpper();

         }

     }

,现在可以得到文件路径了.然后就是对配置文件进行解析了.在这里,我们选用.NET Framework提供的System.Xml命名空间中的轻量级的XmlTextReader来对配置文件进行解析.对应的XmlConfigReader中的函数定义如下:

         public string Process(string sectionName,string key){

              bool inConfiguration = false;

bool inSection = false;

string values;

              XmlTextReader reader = new XmlTextReader(_filepath);

              while( reader.Read()){

                   if( reader.IsStartElement()){

                       if( reader.Prefix == String.Empty)

                       {

                            if( reader.LocalName == "configuration")

                            {

                                 inConfiguration = true;

                            }

                        else if( inConfiguration == true){

                                 if( reader.LocalName == sectionName){

                                     inSection = true;

                                 }

                                 else if( inSection && reader.LocalName == "add"){

                                     if( reader.GetAttribute("key") == null || reader.GetAttribute("value") == null)

                                     {

                                          throw new Exception(sectionName + " key or value is null");

                                     }

                                     if( reader.GetAttribute("key") == key){

                                          values = reader.GetAttribute("value");

                                          break;

                                     }

                                 }

                            }

                       }

                  }

              }

              reader.Close();

              return values;

         }

通过XmlTextReaderRead()函数对Xml文件中的节点进行遍历.同时先判断是否属于configuration节点中,再判断是否属于相应的sectionName.只有在这两部分同时成立的时候才判断是否是相应的Key.如果是,得到其Value,并返回.

 

XmlConfigReader类的使用

     好了,现在通过XmlConfigReader可以对配置文件进行读取了,这里我们看看实际使用的代码:

public class TestXmlConfigReader{

         public void GetValues(){

              XmlConfigReader reader = new XmlConfigReader(@"AppConfig.xml");

              String Temp;

              // Get appSettings username value

              Temp = reader.Process("appSettings",UserName");

              // Get SockBaseSettings ServerIP value

              Temp = Reader.Process(SockBaseSettings,ServerIP);

         }

     }

 

总结

    通过XmlConfigReader,我们可以很方便的自定义我们自己的配置文件.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值