当前位置:网站首页 > 技术博客 > 正文

tinyxml(C++ 使用TinyXML详解)



  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文档

版权声明


相关文章:

  • 新闻管理系统流程图2024-11-07 11:30:01
  • 单片机c语言编程入门教程2024-11-07 11:30:01
  • 怎么将class文件反编译成Java文件2024-11-07 11:30:01
  • 栅格布局是什么意思2024-11-07 11:30:01
  • i3d(3. Getting Started with Pre-trained I3D Models on Kinetcis400¶)2024-11-07 11:30:01
  • 驼峰命名法属于基本的命名规范2024-11-07 11:30:01
  • oracle 游标用法2024-11-07 11:30:01
  • ip a命令详解2024-11-07 11:30:01
  • 安卓手机开机动画怎么设置2024-11-07 11:30:01
  • k2p高恪固件评测2024-11-07 11:30:01