基于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; 
  
boolinSection = false; 
  
string values;
              XmlTextReader reader = new XmlTextReader(_filepath); 
  
              while( reader.Read()){ 
  
                   if( reader.IsStartElement()){ 
  
                       if( reader.Prefix == String.Empty) 
  
                       { 
  
                            if( reader.LocalName
                            { 
  
                                 inConfiguration = true; 
  
                            } 
  
                        else if( inConfiguration == true){ 
  
                                 if( reader.LocalName == sectionName){ 
  
                                     inSection = true; 
  
                                 } 
  
                                 else if( inSection && reader.LocalName
                                     if( reader.GetAttribute("key") == null || reader.GetAttribute("value") == null) 
  
                                     { 
  
                                          throw new Exception(sectionName
                                     } 
  
                                     if( reader.GetAttribute("key") == key){ 
  
                                          values = reader.GetAttribute("value"); 
  
                                          break; 
  
                                     } 
  
                                 } 
  
                            } 
  
                       } 
  
                  } 
  
              } 
  
              reader.Close(); 
  
              return values; 
  
         }

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

 

XmlConfigReader类的使用

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

publicclass 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类,我们可以很方便的自定义我们自己的配置文件.