将 INI 文件转换为 XML
您可能需要将旧的 INI 文件转换为 XML。请继续阅读以获取解决方案。
这是什么?
您是否认为 XML 是一种比老式的 INI 文件更好的存储应用程序配置的方式?当然是。因此,您可能需要将 INI 文件转换为 XML。请继续阅读以获取解决此任务的方案。
我开始用 VB 6 编写应用程序,但是当我完成后,我想,为什么不在 VB.NET 和 C# 中也做一遍呢?因此,代码以这三种语言提供。
.NET 版本使用 .NET Frameworks 的 XmlTextWriter 类来编写 Xml 文件。这个类非常酷,因为它会处理转义任何特殊字符(例如 &、< 和 >),并且使编写 Xml 变得容易。
我该如何使用它?
- 添加对 INI2XML程序集的引用。
- 添加 using Loki或Imports Loki到代码顶部,因为它是在 Loki 命名空间中定义的。
- 然后调用 INI2XML类中的函数Convert。由于Convert函数是 static/Shared 的,因此您不需要创建该类的实例。
示例
C#
INI2XML.Convert( "C:\\WINNT\\iexplore.ini" );
VB.NET
INI2XML.Convert( "C:\WINNT\iexplore.ini" )
VB 6
Call INI2XML( "C:\WINNT\iexplore.ini", "" )
它将创建一个具有相同名称的 xml 文件,扩展名为 .xml,除非您将 xml 文件名作为第二个参数传递。
它是如何做到的?
从 INI 文件读取数据是通过两个巧妙的 WIN32 API 函数完成的。GetPrivateProfileSectionNames 获取 INI 文件中所有节的名称,GetPrivateProfileSection 获取单个节的所有设置。
使用这种方法意味着我不需要编写太多的解析代码来解释 INI 文件格式。
为了编写 XML 文件,我决定使用最简单的方法。在 VB 6 中,我使用了旧的 Open、Print 和 Close。在 VB.Net 和 C# 中,我使用了 .NET Framework 的 System.Xml.XmlTextWriter。
基本上,代码如下所示
- 写入一个开头的根 XML 标签
- 使用 GetPrivateProfileSectionNames获取所有节名称
- 对于每个节- 为该节写入一个开头的 XML 节点
- 使用 GetPrivateProfileSection获取该节中的所有设置
- 对于每个设置- 为该设置写入一个 XML 节点
 
- 为该节写入一个结尾的 XML 标签
 
- 写入一个结尾的根 XML 标签
从转换后的 XML 读取值
有些人问我如何使用创建后的 xml 文件。因此,这是一个从 Xml 文件中读取两个值的示例。它获取 Internet Explorer 的主页和搜索页。
它基本上执行以下操作
- 将 xml 文件加载到 XmlDocument中
- 使用 XPath获取相应的节点
- 从节点 Attributes 集合中获取值
C# 示例
private string GetConfigValue( XmlDocument xmlDoc, string sectionName, 
    string settingName )
{
  string valueRet;
  // get setting node
  string xpath = 
    String.Format( "//section[@name='{0}']/setting[@name='{1}']", 
    sectionName, settingName );
  XmlNode node = xmlDoc.DocumentElement.SelectSingleNode( xpath );
  // display value
  if ( node == null )
  {
    throw new Exception( 
      String.Format( 
        "No such setting, using the following xpath:{0}{1}", 
           Environment.NewLine, xpath ) );
  }
  else
  {
    XmlAttribute xmlAttr = node.Attributes["value"];
    if ( xmlAttr == null )
    {
      throw new Exception( String.Format( 
          "No value for this setting, using the following xpath:{0}{1}", 
          Environment.NewLine, xpath ) );
    }
    else
    {
      valueRet = xmlAttr.Value;
    }
  }
  return valueRet;
}
// Load configuration from xml file
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load( "C:\\WINNT\\iexplore.xml" );
string homePage = GetConfigValue( xmlDoc, "main", "Home Page" );
string searchPage = GetConfigValue( xmlDoc, "main", "Search Page" );
最后
请随意在您的项目中使用此代码,并根据您的具体要求对其进行修改。例如,您可能希望将 VB 6 代码放入 ActiveX DLL 中,或者您可能希望将源 INI 文件中的注释复制到目标 XML 文件中。
历史
- 2007 年 1 月 30 日 - 更新下载




