使用的库
我们使用TinyXML2库来处理XML文件。TinyXML2库是一个完全面向C++的库。是一个易学,轻量级的库。
TinyXML2的使用方法
使用准备
想要使用TinyXML2,你需要包含头文件tinyxml2.h
,然后使用命名空间tinyxml2
:
|
|
TinyXML2对XML文件的结构
读取和获得XML文件及元素
首先来看一下要读取的XML文本:
|
|
首先,TinyXML2通过XMLDocument
来定义一个XML文件,我们可以这样打开一个XML文件:
|
|
注意XMLDocument本身的构造函数是不允许直接打开XML文件的。
然后可以使用RootElement()
的方法来获得根元素(要注意声明不是根元素,根元素是声明下面的第一个元素)。或者使用FirstChildElement()
来获得第一个子元素(因为现在在文档的开头,所以仍然是根元素)。获得的元素类型是XMLElement
,可以有Value()
方法来获得元素的内容(如果没有内容返回名称),Name()
方法获得元素名称:
|
|
当我们获得XML中的一个元素的时候,我们可以调用其方法来获得和其有关的元素,具体方法如下:
NoChildren()
判断是否有子节点。另外还有GetLineNum()
来获得当前行号。需要注意的是,我们还有如下函数来获得信息:
FirstChild()
LastChild()
NextSibling()
PreviewsSibling()
这些函数和图中的函数就差一个Element单词。正如函数名所言,带有Element的函数都是会返回XMLElement
的。但是不带Element的函数返回XMLNode
,XMLNode是所有XML元素(包括XMLElement
,XMLComment
,XMLAttribute
等)的父类。也就是说如果你使用doc.FirstChildElement()
函数,指明了获得元素,那么会获得<story>标签。但是如果你使用doc.FirstChild()
,那么会返回声明(XMLDeclaration
),因为声明才是第一个子节点。
如果不存在某个元素,那么会返回空指针。
有了以上函数,你就可以自由在XML中游走了。
##写XML文件 写XML文件的操作也是封装在XMLNode类中,你可以对任意一个XMLNode的子类进行节点的插入操作。但是要想产生节点,只有通过XMLDocument的工厂函数来创造(不支持直接new)。
也就是说XMLDocument不支持加入属性等,但是可以创建元素。一般我们会首先获得创建的元素,然后对元素的一些属性进行设置,然后再将元素链接到父元素中:
|
|
通过SaveFile()
函数来保存文件。
通过以上函数,你可以随意创建XML文件了。
获得属性元素
TinyXML对元素的获得有一些解析方法,可以将属性解析成各种类型的数据:
- Attribute():直接返回String
- IntAttribute():返回整型
- BoolAttribute():返回布尔类型
- DoubleAttribute():返回double
- FloatAttribute():返回float
- Int64Attribute():64位整型
以方便用户获得不同的数据类型。
错误处理
你也可以用下面的函数进行错误处理:
- Error()
- ErrorID()
- ErrorIDToName()
- ErrorLinenum()
- ErrorName()
- ErrorStr()
- ClearError()
- PrintError()
上面的函数只能针对XMLDocument
来使用。用于在XMLDocument加载xml文件时解析错误而调用的。