将 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 日 - 更新下载