1. 简介

TinyXML2(最新版本)是一个开源的功能齐全的XML解析库 For C++,源码见:github。

2. 开始使用

首先从Github上获得源码,是一个完整的演示工程,我们只需要其中的tinyxml2.cpptinyxml2.h,将这两个文件拷贝到新建的VS工程目录下,然后就可以开始使用了,这是方法之一,也可以将源码编译为.lib然后链接到工程中。

然后包含头文件tinyxml2.h,并使用命名空间:using namespace tinyxml2

3. 写XML

#include <iostream>
#include "tinyxml2.h"using namespace std;using namespace tinyxml2;int main()
{// 新建一个空文档(表示完整的xml)XMLDocument xmlDoc;// 新节点XMLNode * pRoot = xmlDoc.NewElement("Root"); // 插入到xmlDoc的第一个节点(根节点)xmlDoc.InsertFirstChild(pRoot); // 新建一个元素XMLElement *pElement = xmlDoc.NewElement("IntValue"); // 设置该元素(节点)的值pElement->SetText(10);// 设置该元素的属性(重载)pElement->SetAttribute("year", 2017);pElement->SetAttribute("key", "hello");// 将该节点添加到pRoot节点下("Root")pRoot->InsertEndChild(pElement);// 指向新的节点pElement = xmlDoc.NewElement("FloatValue");// 添加到pRoot节点(依次向下添加)pRoot->InsertEndChild(pElement);// 新建一个节点XMLElement *pNewElement = xmlDoc.NewElement("value1");// 设置节点的值pNewElement->SetText(1.0);// 将该节点添加到pElement节点下("FloatValue")pElement->InsertFirstChild(pNewElement);// 指向新的节点pNewElement = xmlDoc.NewElement("value2");// 设置节点的值pNewElement->SetText(2.0);// 将该节点插入到pElement节点下(依次向下添加)pElement->InsertEndChild(pNewElement);// 保存文件XMLError eResult = xmlDoc.SaveFile("test.xml");if (eResult != XML_SUCCESS)cout << "error\n";return 0;
}

结果 test.xml

<Root><IntValue year="2017" key="hello">10</IntValue><FloatValue><value1>1</value1><value2>2</value2></FloatValue>
</Root>

4. 读取XML

#include <iostream>
#include "tinyxml2.h"using namespace std;using namespace tinyxml2;int main()
{// 新建一个空文档XMLDocument xmlDoc;// 读取指定的xml文件并判断读取是否成功XMLError eResult = xmlDoc.LoadFile("test.xml");if (eResult != XML_SUCCESS){cout << "error\n";return XML_ERROR_FILE_NOT_FOUND;}// 获得该文件的第一个节点(根节点)XMLNode * pRoot = xmlDoc.FirstChild();if (pRoot == nullptr)return XML_ERROR_FILE_READ_ERROR;// 找到该节点中的名字为 "IntValue"的第一个子节点XMLElement * pElement = pRoot->FirstChildElement("IntValue");if (pElement == nullptr)return XML_ERROR_PARSING_ELEMENT;// 读取子节点的值int iOutInt;eResult = pElement->QueryIntText(&iOutInt);if (eResult != XML_SUCCESS)return XML_ERROR_PARSING;elsecout << iOutInt << endl;// 读取子节点的属性int iOutYear;eResult = pElement->QueryIntAttribute("year", &iOutYear);if (eResult != XML_SUCCESS)return XML_ERROR_PARSING;elsecout << iOutYear << endl;// 获得该子节点的下一个兄弟节点(更深层的节点搜索类似)XMLElement * nextNode = pElement->NextSiblingElement();cout << nextNode->Name() << endl;return 0;
}

运行结果

10
2017
FloatValue

转载于:https://www.cnblogs.com/whlook/p/7117306.html

C++:tinyxml的使用相关推荐

  1. 通过tinyxml解析百度热词榜单

    百度热词榜单 初学TinyXml,盯上了解析百度热词榜单.通过curl获取rss地址上的数据. 由于TinyXml不支持,所以要转换为UTF-8格式,命令为 iconv -f gb2312 -t ut ...

  2. tinyxml 读取文本节点_【C++】【TinyXml】xml文件的读写功能使用——写xml文件

    TinyXml工具是常用比较简单的C++中xml读写的工具 需要加载 #include "TinyXml\tinyxml.h" 在TinyXML中,根据XML的各种元素来定义了一些 ...

  3. linux 安装tinyxml,使用TinyXml

    使用TinyXml的两种方法. 第一,导入所需的头文件和cpp文件 TinyXml 由两个头文件(.h文件)和四个CPP文件(.cpp文件)构成,用的时候,只要将(tinyxml.h.tinystr. ...

  4. tinyxml 读取文本节点_TinyXml 读写XML文件

    使用Tinyxml创建和读取XML文件的优点:1,可在Windows和Linux中使用:2,方便易学,易用,可在http://sourceforge.net/projects/tinyxml/获取源代 ...

  5. C++ XML解析之TinyXML篇[转]

    最 近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完 成.以后的文章里会讲 ...

  6. PHP编译为静态库,Linux下将Tinyxml编译为静态库

    转载请注明来源:Linux下将Tinyxml编译为静态库 一个应用需要在linux服务器上运行,不能保证每个服务器都有应用依赖的库,又懒得每个服务器都去安装下,也不太现实,于是就将应用所用到的库全部编 ...

  7. TinyXml高速入口(一)

    笔者:朱金灿 来源:http://blog.csdn.net/clever101 对于xml文件,眼下我的工作仅仅是集中在配置文件和作为简单的信息文件来用.因此我不太喜欢使用msxml这样的重量级的x ...

  8. tinyxml 内存泄露_有关TinyXML使用的简单总结

    这次使用了TinyXML后,觉得这个东西真是不错,于是将使用方法坐下总结来和大家分享. 该解析库在开源网站(http://sourceforge.net )上有下载,在本Blog也提供下载(下载Tin ...

  9. XML Parser(Tinyxml)的使用

    1. 下载开源代码Tinyxml,附件带有. 2. 直接将源码加入到我们的工程中. 3. 包含相应的头文件. 4. 测试代码 Read : TiXmlDocument * myDocument     ...

  10. TinyXml高速入门(一)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 对于xml文件,眼下我的工作仅仅是集中在配置文件和作为简单的信息文件来用,因此我不太喜欢使用msxml这样的重量级的x ...

最新文章

  1. 使用MongoDB存储Docker日志(续)
  2. getaddrinfo(localhost.localdomain): 未知的名称或服务
  3. C语言如何产生随机数
  4. 数学建模——主成分分析算法详解Python代码
  5. 熔池 沉积_用于3D打印的AI(第3部分):异常熔池分类的纠缠变分自动编码器
  6. python封装工具类多个项目使用_【arcpy项目实战】将多个点两两生成的最短路径pyhon代码封装入script中...
  7. 算法复习第三章分治法
  8. 华为Mate40系列安兔兔跑分曝光:麒麟9000性能超骁龙865
  9. 主板检测卡c5_检测升级 | 华北工控推出机器视觉检测系统计算机产品方案
  10. 2019 fall CS224w:01-intro
  11. 学生网页设计作业源码 HTML+CSS 网上书店网站设计与实现
  12. 华为机试练习(十二)叠积木
  13. 什么是SVC?AVC和SVC有什么区别
  14. 一篇带你熟悉MySQL
  15. hadoop组件---面向列的开源数据库(九)--python--python使用thrift连接hbase
  16. win8 android 跑分,Windows 10和win8.1性能跑分测试结果曝光
  17. 用机器学习颠覆环法自行车赛传统体验 岱凯野心可不只有这一点!
  18. 基于STM32智能小车->电机驱动
  19. to_char在oracle 中函数使用方法
  20. STM32关于“NVIC_InitStructure.NVIC_IRQChannel = TIM1_IRQn; error:useof undeclared identifi ‘T1M1_IRQN‘

热门文章

  1. sql性能优化:MS-SQL(SQL Server2012)服务器配置选项(sp_configure )对照表
  2. 【图像格式】关于YUV格式的一些总结
  3. reactor模型实现
  4. html 判断页面加载完成,Javascript判断页面是否加载完成
  5. 网页栅格化研究(2):蛋糕的切法
  6. python类的定义与实例化
  7. 怎么看有没有java环境变量_linux查看java环境变量
  8. 计算机应用基18春在线作业,南开18春学期计算机应用基础在线作业3
  9. 下载《建筑的永恒之道》
  10. java list的tostring,Java ArrayList toString() 方法