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;
else
cout << iOutInt << endl; // 读取子节点的属性
int iOutYear;
eResult = pElement->QueryIntAttribute("year", &iOutYear);
if (eResult != XML_SUCCESS)
return XML_ERROR_PARSING;
else
cout << iOutYear << endl; // 获得该子节点的下一个兄弟节点(更深层的节点搜索类似)
XMLElement * nextNode = pElement->NextSiblingElement();
cout << nextNode->Name() << endl; return 0;
}

运行结果

10
2017
FloatValue

C++:tinyxml的使用的更多相关文章

  1. C++ tinyXML使用

    tinyXML下载: http://sourceforge.net/projects/tinyxml/ 加载到项目: 这六个文件添加到你的c++工程中,分别是tinystr.h.tinystr.cpp ...

  2. tinyXML的用法

    tinyXML一款很优秀的操作C++类库,文件不大,但方法很丰富,和apache的Dom4j可以披靡啊!习惯了使用java类库的我看到这么丰富的c++类库,很高兴!它使用很简单,只需要拷贝几个文件到你 ...

  3. tinyxml一个优秀的C++ XML解析器

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...

  4. C++库(TinyXML)

    C++库(TinyXML) 什么是XML? "当 XML(扩展标记语言)于 1998 年 2 月被引入软件工业界时,它给整个行业带来了一场风暴.有史以来第一次,这个世界拥有了一种用来结构化文 ...

  5. tinyXML的用法,用于解析gpx文件

    tinyxml是一个开源的C++xml解析工具集,简单.轻量而又高效,所以对于处理xml文件是一个非常不错的选择. 由于它开源,所以可以方便地免费下载,下载地址百度一下很容易找到,这里就不多说了. 下 ...

  6. tinyxml学习4

    tinyXML一款很优秀的操作C++类库,文件不大,但方法很丰富,和apache的Dom4j可以披靡啊!习惯了使用java类库的我看到这么丰富的c++类库,很高兴!它使用很简单,只需要拷贝几个文件到你 ...

  7. tinyxml学习5

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...

  8. tinyxml学习一

    在TinyXML中,根据XML的各种元素来定义了一些类:         TiXmlBase:整个TinyXML模型的基类.         TiXmlAttribute:对应于XML中的元素的属性. ...

  9. tinyxml学习2

    在TinyXML中,根据XML的各种元素来定义了一些类: TiXmlBase:整个TinyXML模型的基类. TiXmlAttribute:对应于XML中的元素的属性. TiXmlNode:对应于DO ...

  10. TinyXML:一个优秀的C++ XML解析器

    //-------------------------------------------------------------------------------------------------- ...

随机推荐

  1. Django:学习笔记(6)——模型

    Django:学习笔记(6)——模型 快速上手 模型到底是什么呢?我们可以想,如果一张数据表的各个字段可以自动映射到一个类的各个属性,则每条记录对应这个类的一个对象.那我们通过类方法来操作对象(即表记 ...

  2. 2017浙江省赛 D - Let's Chat ZOJ - 3961

    地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3961 题目: ACM (ACMers' Chatting Messe ...

  3. 前端虚拟接口mockjs的使用

    最近在学习VueJS,也进一步学习了ES6,看了一遍之后,难免手痒,所以想仿写点什么,但是数据是个问题,你总不能写个分页,写个轮播吧,但是在公司做自己的东西找后台要接口也不那么像回事,怎么办呢? 无意 ...

  4. jvm3---垃圾回收器算法

    .1. GC算法 .1.1. 标记-清除算法(Mark-Sweep) 1.标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象 2.在标记完成后统一回收所有被标记的对象 缺点:一个是效率问题 ...

  5. Linux进程管理 lsof命令:列出进程调用或打开的文件信息

    lsof命令 通过 ps 命令查询到系统中所有的进程, 通过lsof 命令可以知道这个进程到底在调用哪些文件.lsof 命令格式如下: [root@localhost ~]# lsof [选项] 选项 ...

  6. 关于URL和http协议,http消息格式

    转自:http://crystal2012.iteye.com/blog/1447845 在WWW(全球资讯网)中想要连结到某个网页,便需要给浏览器一个位址,而URL在此的功能就是告知浏览器某个资源在 ...

  7. 20145329《Java程序设计》第六周学习总结

    教材学习内容总结 第十章 InputSream与OutputStream Java中,输入串流代表对象为java.io.InputStream实例,输出串流代表对象为java.io.OutputStr ...

  8. 20145331 《Java程序设计》第6周学习总结

              20145331 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 10.1.1串流 •Java将输入/输出抽象化为串流,数据有来源及目的地,衔 ...

  9. php实现dota天梯、wow竞技场、lol排位赛匹配加分算法ELO

    public function marchOpponents() { $rstep = Yii::$app->params['ratingStep'];//(随机范围) $rsN=100; $d ...

  10. vSphere SDK for Java 示例

    示例代码: package com.vmware.event.connect; import java.net.MalformedURLException; import java.net.URL; ...