TinyXML2

TinyXML2

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手。

这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。

在TinyXML中,根据XML的各种元素来定义了一些类:

XmlBase:整个TinyXML模型的基类。
XmlAttribute:对应于XML中的元素的属性。
XmlNode:对应于DOM结构中的节点。
XmlComment:对应于XML中的注释。
XmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。
XmlDocument:对应于XML的整个文档。
XmlElement:对应于XML的元素。
XmlText:对应于XML的文字部分。
XmlUnknown:对应于XML的未知部分。
XmlHandler:定义了针对XML的一些操作。

Demo

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "tinyxml2.h"
#include <iostream> using namespace tinyxml2;
using namespace std; bool createXml(const char* savepath)
{
XMLDocument *doc = new XMLDocument;
XMLDeclaration *declaration = doc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\"");
doc->LinkEndChild(declaration); XMLElement *School = doc->NewElement("School");
doc->LinkEndChild(School);
School->SetAttribute("name","机械工程学院"); XMLElement *Class = doc->NewElement("Class");
School->LinkEndChild(Class);
Class->SetAttribute("name","c++"); XMLElement *Student = doc->NewElement("Student");
Class->LinkEndChild(Student);
Student->SetAttribute("name","天霸");
Student->SetAttribute("number", "01"); XMLElement *Email = doc->NewElement("Email");
Student->LinkEndChild(Email);
XMLText * email = doc->NewText("TB@126.com");
Email->LinkEndChild(email); XMLElement *Address = doc->NewElement("Address");
Student->LinkEndChild(Address);
XMLText * address = doc->NewText("中国辽宁");
Address->LinkEndChild(address); XMLElement *Student_1 = doc->NewElement("Student");
Class->LinkEndChild(Student_1);
Student_1->SetAttribute("name", "动霸");
Student_1->SetAttribute("number", "02"); XMLElement *Email_1 = doc->NewElement("Email");
Student_1->LinkEndChild(Email_1);
XMLText * email_1 = doc->NewText("DB@126.com");
Email_1->LinkEndChild(email_1); XMLElement *Address_1 = doc->NewElement("Address");
Student_1->LinkEndChild(Address_1);
XMLText * address_1 = doc->NewText("中国香港");
Address_1->LinkEndChild(address_1); if (XML_SUCCESS != doc->SaveFile(savepath)) {
delete doc;
return false;
} delete doc;
return true;
} bool readXml(const char* filename)
{
XMLDocument doc;
if (XML_SUCCESS != doc.LoadFile(filename)) {
return false;
} XMLElement *School = doc.RootElement();
if (School){
cout << "School:" << School->Attribute("name") << endl; XMLElement *Class = School->FirstChildElement("Class");
while (Class) {
cout << " Class:" << Class->Attribute("name") << endl; XMLElement *Student = Class->FirstChildElement("Student");
while (Student) {
cout << " Student:" << Student->Attribute("name") << ", " << Student->Attribute("number") << endl; XMLElement* Email = Student->FirstChildElement("email");
if (Email){
cout << " Email:" << Student->GetText() << endl;
}
XMLElement* Address = Student->FirstChildElement("address");
if (Address){
cout << " Address:" << Address->GetText() << endl;
}
Student = Student->NextSiblingElement("Student");
} Class = Class->NextSiblingElement();
} }
} int main()
{
char * path = "d:/tmp.xml";
createXml(path);
readXml(path);
return 0;
}

TinyXML2 使用的更多相关文章

  1. TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏

    TinyXML2是simple.small.efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http: ...

  2. tinyxml2简单使用

    引入头文件 <span style="font-size:18px;">#include "HelloWorldScene.h" #include ...

  3. cocos2d-x使用tinyxml2存储解析xml

    我用的是2.1.4的cocos2d-x,里面自带有tinyxml2库. 导入头文件:#include "support/tinyxml2/tinyxml2.h" using nam ...

  4. TinyXml和tinyxml2

    C++操作xml没有标准库的支持,TinyXml是个不错的xml操作库,以前总是使用TinyXml读写xml,但是最近对大量xml进行读写时,速度真的是有点慢,特别是在调试时,每次启动读xml就要好长 ...

  5. 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml

     数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...

  6. 用TinyXml2读取XML文件的一个简单Demo

    废话少说直接上代码,需要的人自然一看便懂,对于第一次接触TinyXml2的人来说还是有帮助的. <?xml version="1.0"?> <Table name ...

  7. tinyxml2库的使用--MFC工程

    在编写应用程序的时候,经常需要动态加载某些数据,这种情况下微软的ini文件是蛮好的选择,但是平台的通用性比较差,使用xml的话就比较强一点,但是解析比较复杂,型号有牛人已经开发出了直接读写xml的库, ...

  8. TinyXML2的使用

    -----------------------------------------------------------------2015年7月21日16:37:53----------------- ...

  9. 推荐一个优秀的c++源代码,TinyXml2

    项目主页:http://grinninglizard.com/tinyxml2docs/index.html tinyxml2.h /* Original code by Lee Thomason ( ...

  10. Windows10 VS2017 C++ xml解析(tinyxml2库)

    首先下载tinyxml2 7.0.1库: https://github.com/leethomason/tinyxml2/releases 打开tinyxml2,然后升级sdk,解决方案->重定 ...

随机推荐

  1. zz:一个框架看懂优化算法之异同 SGD/AdaGrad/Adam

    首先定义:待优化参数:  ,目标函数: ,初始学习率 . 而后,开始进行迭代优化.在每个epoch  : 计算目标函数关于当前参数的梯度:  根据历史梯度计算一阶动量和二阶动量:, 计算当前时刻的下降 ...

  2. [RN] React Native FlatList 选中后 状态没有立即发生改变,而在下一次生效的问题

    React Native FlatList 选中后 状态没有立即发生改变,而在下一次生效的问题 解决关键: 给 FlatList 添加 extraData={this.state} 非常关键,如果不设 ...

  3. 请求与上传文件,Session简介,Restful API,Nodemon

    作者 | Jeskson 来源 | 达达前端小酒馆 请求与上传文件 GET请求和POST请求 const express = require('express'); const app = expre ...

  4. [LeetCode] 227. Basic Calculator II 基本计算器之二

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  5. [LeetCode] 210. Course Schedule II 课程清单之二

    There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prereq ...

  6. KMP 串的模式匹配 (25分)

    给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出.如果找不到,则输出“Not ...

  7. ORA-01722 invalid number 一个比较隐蔽的可能错误原因

    在Oracle数据库中,数据类型为char或者varchar的字段,里面存储的数据,可以是纯数字串,比如:  3433,也可以是带有英文字符的字符串,比如:  3433a. Oracle对于纯数字串, ...

  8. 关于ProxmoxVE

    1) PVE简介 PVE是Proxmox Virtual Environment(Proxmox虚拟化环境,也通常简称为Proxmox VE)的简称,它是基于QEMU/KVM和LXC的开源服务器虚拟化 ...

  9. windows下zookeeper安装并发布成windows服务

    https://blog.csdn.net/yzy199391/article/details/80605195

  10. AtomicReference示例

    对引用类型的原子性操作 /** * *对引用变量的原子操作 note: *在java中对引用类型的变量,赋值是原子性的,为什么还要有atomicReference,假如要对一个引用类型进行比较,设置等 ...