C++下XML文件处理工具TinyXML

1.引言

在应用程序中,经常将一些系统配置参数保存至配置文件中,以便于在系统启动时初始化用。以前用的最多的是INI格式的文件,在WINODWS操作系统中也常见到:

以C:\WINDOWS目录下的system.ini文件为例,内容如下:

; for 16-bit app support

[drivers]
wave=mmdrv.dll
timer=timer.drv

[mci]
[driver32]
[386enh]
woafont=app936.FON
EGA80WOA.FON=EGA80WOA.FON
EGA40WOA.FON=EGA40WOA.FON
CGA80WOA.FON=CGA80WOA.FON
CGA40WOA.FON=CGA40WOA.FON

[]类似于数组括号里面的内容用于大的分类,在该分类下,以KEY-VALUE的形式用以说明参数的内容。

当配置信息分类简单、条目较少、且数据元素之前没有过多的关系时,用INI方式较为简单,
但是如果配置信息繁多,数据之间关系复杂,组织形式比较丰富的情况下,会发现以INI格式组织信息会显的力不从心。


这时可以考虑XML文件进行数据管理。XML是一种通用的标记语言,与语言无关,与操作系统平台无关,以树形方式组织数据,非常适合用来描述结构化数据。

XML 文档必须包含根元素。该元素是所有其他元素的父元素。XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。所有元素均可拥有子元素,并一个元素也可以拥有自己的属性:

<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root> 

JDK自带了对XML的支持工具,XML文件的加载、组织功能无需用户再次开发,直接调用相关类库即可。但是对于C++语言,操作系统中提供的运行时库是不支持XML的处理的,需要用户自行想办法。本文介绍一款C++下解析XML文件的工具,即TinyXML。

2.TinyXML

TinyXML总共包含如下几个文件:
C++下XML文件处理工具TinyXML

 

类之间的继承关系:

C++下XML文件处理工具TinyXML

 

主要类的说明:(在实际编程中,使用如下几个类基本能够满足功能要求)

TiXmlAttribute 代表一个元素的属性,以name-value的形式
TiXmlComment 代表XML注释
TiXmlDeclaration 文件声明,比如版本号,编码等
TiXmlDocument 代表一个XML文档
TiXmlElement 一个XML元素

 3.示例DEMO

3.1. XML文件加载

std::string xmlFilePath = "D:\\Project\\param.xml";
TiXmlDocument* doc = new TiXmlDocument();
doc->LoadFile(xmlFilePath.c_str());

通过上述过程,就可以讲XML文档中的内容加载到内存中,并组织成一颗DOM树。

 

3.2. 节点查找

for (TiXmlElement* childNode = (TiXmlElement*)(root->FirstChild()); 
		childNode != NULL; 
		childNode =  (TiXmlElement*)(root->NextSiblingElement()))
	{
		if (check(childNode))
                     {
                           return childNode;
                     }
	}

通过遍历某个节点的孩子节点,并检查节点的内容,判断是否符合条件

3.3. 节点创建以及挂载

示例展示了如果创建新节点、设置节点属性并挂载的父节点中

TiXmlElement* root = doc->RootElement();

//创建新数据节点
TiXmlElement* newRecord = new TiXmlElement(XML_RECORD);
newRecord->SetAttribute("phone", phoneNum);
newRecord->SetAttribute("name", name); 
root->LinkEndChild(newRecord);

3.4. 文件保存

TiXmlDocument* doc;
std::string xmlFilePath;
doc->SaveFile(xmlFilePath);

说明及附注

1.采用XML可以非常灵活的自定义自组织数据;同时采用XML组织的数据可读性非常好。

2.通过TinyXML可以解决如XML文件加载及解析、节点创建挂载、文件保存等一系列工作,用户只需要根据自定义的
数据形式,把DOM树种的值提取出来即可。也可以修改DOM树上节点的值,并同步到文件中。

3. TinyXML提供了最简单也最通用的XML文件操作接口,在实际项目开发中,往往需要在此基础上,进一步结合业务
需求,定制一些直接面向应用的接口,但是往往是如下风格:
Get***Parameter(string id); Set***Parameter(string id, string val);
开发人员可以直接调用Get/Set接口,而无需关心XML文件的操作。

TinyXML下载链接:http://sourceforge.net/projects/tinyxml/

 


你可能感兴趣的:(C++,tinyxml)