1. 简介

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

2. 开始使用

首先从Github上获得源码,是一个完整的演示工程,我们只需要其中的tinyxml2.cpp和tinyxml2.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. centos下删除名称为乱码的文件

    1.通过ls -li 获取要删除乱码文件名文件的inode号,比如得到的是 146506

  2. java 加密解密

    https://www.cnblogs.com/kingsleylam/category/752546.html <java加密与解密艺术>代码可抄袭.

  3. 前端学习笔记之BOM和DOM

    前言 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...

  4. Django学习笔记之Django ORM相关操作

    一般操作 详细请参考官方文档 必知必会13条 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> ...

  5. 20145216史婧瑶《Java程序设计》第三次实验报告

    实验三 敏捷开发与XP实践 实验内容 使用git上传代码,两个人进行小组合作,队友下载代码并修改再重新上传. 实验步骤 一. 使用git上传代码 1.找到需要push的文件所在文件夹,右键点击Git ...

  6. linux第四周

    一.知识点总结 (一)用户态.内核态和中断 1.内核态:在高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态 2.用户态:在低级别的指令状态下,代码 只能在级别允许的特 ...

  7. 解读:CombineFileInputFormat类

    MR-Job默认的输入格式FileInputFormat为每一个小文件生成一个切片.CombineFileInputFormat通过将多个“小文件”合并为一个"切片"(在形成切片的 ...

  8. centos 查询mysql配置文件位置

    具体指令: 1.which mysqld  (”which 文件名“ : 搜索命令所在路径及别名) 2./usr/sbin/mysqld --verbose --help | grep -A 1 'D ...

  9. linux(一)export的生命周期

    本文从shell执行的角度分析export变量的生命周期 # 只对当前shell环境起作用,比如通过不同的远程ssh就是不同的shell环境 export k=v 当运行一个.sh文件或者是shell ...

  10. windows下,python3安装django和mysql驱动

    1.安装python3和django (1)Python 下载地址:https://www.python.org/downloads/ (2)Django 下载地址:https://www.djang ...