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

tinyxml2中文指南



原文转自 http://blog.csdn.net/K346K346/article/details/

TinyXML2是simple、small、efficient开源的C++ XML文件解析库,可以很方便的应用到现有的项目之中。非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。

TinyXML2详细介绍与源码获取方法详见:TinyXML2官网。


TinyXML1与TinyXML2这两个著名的开源XML文件解析库均出自Lee Thomason之手,向这位满怀开源精神的大家致敬。

TinyXML2适用于大部分的C/C++项目开发,经得住考验,是最好的选择。较TinyXML1而言,TinyXML2化繁为简,使用时只需要包含两个文件,而TinyXML1需要6个文件,一般生成静态链接库供项目的使用。TinyXML1详细介绍与源码见:TinyXML1官网。TinyXML1用法用例可以参考博文:TinyXML快速入门。

TinyXML2使用了与TinyXML1相似都可API,并且拥有丰富的案例。但TinyXML2解析器相对TinyXML1在代码上是完全重写,使其更适合于游戏开发中使用。它使用更少的内存,更快,并使用更少的内存分配。

TinyXML2无需STL,也放弃了对STL支持。所有字符串查询均使用C风格字符串“const char *”来表示,省去string类型对象的构造,并使代码更简单。

二者共同点: (1)都使用了简单易用的API。 (2)都是基于DOM(Document Object Model,文档对象模型)的解析器。 (3)都支持UTF-8编码。

TinyXML2的优点: (1)对大部分大部分的C/C++项目具有普适性。 (2)使用较少的内存(约TinyXML1的40%),速度变得更快。 (3)没有C++的STL的要求。 (4)更接近现代C++的特性,如使用了适当的命名空间。 (5)适当有效的处理了的空白字符(空格,TAB和回车)。

TinyXML1的优点: (1)可以报告分析错误的位置。 (2)提供一些C++ STL公约支持:流和字符串。 (3)拥有非常成熟和良好的调试代码库。


TinyXML2的网上教程并不多见,醍醐灌顶,受益匪浅的教程更是凤毛麟角。有的也是蜻蜓点水、参差不齐的泛泛而谈。最终,所能参考的资料也就是官网的文档和示例代码,但却有点晦涩难懂。因此,本文就为了解决这个尴尬的局面,结合官网的资料和网上资源,尽量详细的列出TinyXML2的常见用法用例,不足之处,请留言补充,后续增加修改。

xml文件本质就是小型的,换个角度来说就是,对数据库有什么操作,那么对xml文件就应能实现什么操作。一般而言,对数据库的操作包括以下几种:新建数据库和对数据库增删查改。那么对应xml文件就是新建xml文件、增加xml文件的节点,删除xml文件的指定节点,查询xml文件指定节点的值,修改xml文件中节点的值。

使用方法:将tinyxml2.cpp和tinyxml2.h拷贝至项目目录,使用时包含#include “tinyxml2.h”和using namespace tinyxml2。

使用场景:存储用户信息。

用户数据表设计如下:

变量名描述类型长度(字节)不为空主键 UserName 用户名 Vchar 3-20 Y Y Password 密码 Char 32 Y N Gender 性别 Int 1 N N Mobile 电话 Char 11 N N Email 电子邮箱 Varchar 1-50 N N

对应XML文件实现如下:

从中可以看出,XML由三大部分组成,分别是声明、根节点和其它节点。其中xml文件的声明包括三方面的内容:Version、Standalone和Encoding。下面将详细列出常见tinyxml2的用法。

注意:以下示例代码针对本人下载使用的TinyXML2,官网的TinyXML2在不断的完善和更新当中,最新的TinyXML2和本人的示例代码可能会有出入。本人使用的TinyXML2是2015.9.23从官网下载的,已上传至CSDN下载,见:TinyXML2。

示例代码:

创建结果:

示例代码:

创建结果:

Xml文件中,一个用户节点存储一个用户的信息。因此,对用户信息的增删查改,即无论查询节点、删除节点、修改节点和增加节点,都需要获取需要操作的节点。那么先实现一个根据用户名获取节点指针的函数:

在以上函数的基础上,获取用户信息的函数:

验证代码:

修改结果:

验证代码:

删除结果:


验证代码:

验证结果:

采用tinyXML中的TiXmlDocument类的Parse方法即可。例如:
const char * xmlString = "<?xml version="1.0" standalone=no> <!– Our to do list data –> <ToDo> <Item priority="1"> <bold>Toy store!</bold> </Item> <Item priority="2"> Do bills</Item> </ToDo> ";
XMLDocument *doc = new XMLDocument();
doc->Parse(xmlString);

XMLElement * rootElement = doc->RootElement();
const char * rootName = rootElement->Value();

  • 上一篇: 结构体数组如何定义
  • 下一篇: rownum的使用
  • 版权声明


    相关文章:

  • 结构体数组如何定义2024-11-12 16:29:59
  • 转隶托管是什么意思2024-11-12 16:29:59
  • 尺度在整个空间设计中的作用2024-11-12 16:29:59
  • 径向基神经网络模型2024-11-12 16:29:59
  • linux运行so文件2024-11-12 16:29:59
  • rownum的使用2024-11-12 16:29:59
  • jdk环境下载2024-11-12 16:29:59
  • so文件怎么使用2024-11-12 16:29:59
  • cmd网络监控命令2024-11-12 16:29:59
  • java测试软件2024-11-12 16:29:59