TinyXML是一个开源的解析XML的C++解析库,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。
下载地址:http://www.grinninglizard.com/tinyxml/
解压缩后使用TinyXML只需要将其中的6个文件拷贝到项目中就可以直接使用了,这六个文件是:tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp,添加头文件#include "tinyxml.h"或#include <tinyxml>。
看一下TinyXML类之间继承关系:
可以看到TinyXml中的注释comment ,声明declaration,元素element,文本等都是节点Node的子类,也就是说可以把XMl文件中的各个元素当做节点来处理。Node类型也有到各个子类之间的转换方法,如ToElement()转换成元素,ToDocument转换成文档等。
1.各类之间的关系
TinyXml实现的是DOM访问模型,因此提供了一系列的类对应XML文件中的各个节点。主要类间的关系如下:
TiXmlBase:其他类的基类,是个抽象类
TiXmlNode:表示一个节点,包含节点的一般方法,如访问子节点、兄弟节点、编辑自身、编辑子节点
TiXmlDocument:表示整个XML文档,不对应其中某个特定的节点。
TiXmlElement:表示元素节点,可以包含子节点和TiXmlAttribute
TiXmlComment:表示注释
TiXmlDeclaration:表示声明
TiXmlText:表示文本节点
TiXmlUnknown:表示未知节点,通常是出错了
TiXmlAttribute:表示一个元素的属性
通过一个例子说明一下各类:
整个文档,对应TiXmlDocument;Camera,name,price,description,都对应TiXmlElement;第一行对应一个TiXmlDeclaration;第二行对应一个TiXmlComment;“TinyXml How To”对应一个TiXmlText;unit则是price的一个TiXmlAttribute;这些类与XML文件中的相应元素都有很好的对应关系,因此相信参照TinyXml的文档,可以很容易的掌握各个方法的使用。
2.TinyXML节点类型
TinyXML的节点类型types是一个枚举类型,包含DOCUMENT, ELEMENT, COMMENT, UNKNOWN, TEXT 和 DECLARATION。
3.使用时需注意问题
i.各类之间的转换
由于各个节点类都从TiXmlNode继承,在使用时常常需要将TiXmlNode*类型的指针转换为其派生类的指针,在进行这种转换时,应该首先使用由TiXmlNode类提供的一系列转换函数,如ToElement(void),而不是c++的dynamic_cast。
ii.检查返回值
由于TinyXml是一个非校验的解析器,因此当解析一个文件时,很可能文件并不包含我们预期的某个节点,在这种情况下,TinyXml将返回空指针。因此,必须要对返回值进行检查,否则将很容易出现内存访问的错误。
iii.如何重头建立一个XML文件
先建立一个TiXmlDocument对象,然后,载入某个模板,或者直接插入一个节点作为根节点,接着就可以像打开一个已有的XML文件那样对它进行操作了。
iv.遍历xml
TinyXml中的每个节点都可能是另一个节点的父节点这个很重要,因此遍历TinyXml文档要用递归的方法。另外每个节点都可能具有属性,文本等。
读取代码:
XML作为字符串传入,解析XML:
生成代码:
创建xml,并以字符串返回:
(1) FirstChildElement(const char* value=0):获取第一个值为value的子节点,value默认值为空,则返回第一个子节点。
(2) NextSiblingElement( const char* _value=0 ) :获得下一个(兄弟)节点。
(3) LinkEndChild(XMLHandle *handle):添加一个子节点。元素或者文本
(4) GetText() :返回一个元素标签的内容
(5) LoadFile():重载函数,加载一个xml文件
(6) SaveFile():重载函数,保存一个xml文件
(7) Parse():解析传入字符串xml数据
(8) RootElement():获取根节点
更多函数使用说明,直接参考TinyXML文档
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/12370.html