TinyXML2 使用
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 使用的更多相关文章
- TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏
TinyXML2是simple.small.efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http: ...
- tinyxml2简单使用
引入头文件 <span style="font-size:18px;">#include "HelloWorldScene.h" #include ...
- cocos2d-x使用tinyxml2存储解析xml
我用的是2.1.4的cocos2d-x,里面自带有tinyxml2库. 导入头文件:#include "support/tinyxml2/tinyxml2.h" using nam ...
- TinyXml和tinyxml2
C++操作xml没有标准库的支持,TinyXml是个不错的xml操作库,以前总是使用TinyXml读写xml,但是最近对大量xml进行读写时,速度真的是有点慢,特别是在调试时,每次启动读xml就要好长 ...
- 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml
数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...
- 用TinyXml2读取XML文件的一个简单Demo
废话少说直接上代码,需要的人自然一看便懂,对于第一次接触TinyXml2的人来说还是有帮助的. <?xml version="1.0"?> <Table name ...
- tinyxml2库的使用--MFC工程
在编写应用程序的时候,经常需要动态加载某些数据,这种情况下微软的ini文件是蛮好的选择,但是平台的通用性比较差,使用xml的话就比较强一点,但是解析比较复杂,型号有牛人已经开发出了直接读写xml的库, ...
- TinyXML2的使用
-----------------------------------------------------------------2015年7月21日16:37:53----------------- ...
- 推荐一个优秀的c++源代码,TinyXml2
项目主页:http://grinninglizard.com/tinyxml2docs/index.html tinyxml2.h /* Original code by Lee Thomason ( ...
- Windows10 VS2017 C++ xml解析(tinyxml2库)
首先下载tinyxml2 7.0.1库: https://github.com/leethomason/tinyxml2/releases 打开tinyxml2,然后升级sdk,解决方案->重定 ...
随机推荐
- USACO wormhole
洛谷 P1444 [USACO1.3]虫洞wormhole https://www.luogu.org/problemnew/show/P1444 JDOJ 2386: USACO 2013 Dec ...
- [RN] React Native FlatList 选中后 状态没有立即发生改变,而在下一次生效的问题
React Native FlatList 选中后 状态没有立即发生改变,而在下一次生效的问题 解决关键: 给 FlatList 添加 extraData={this.state} 非常关键,如果不设 ...
- 11/6 <bit manipulation>
389. Find the Difference ^ (按位异或): 参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0. 抵消掉相同的位,剩下的就是多余的位. class ...
- 洛谷P2996 [USACO10NOV]拜访奶牛Visiting Cows
题目 树形dp 设f[i][j]表示走到第i号节点的最大权值 j为0/1表示这个点选或者不选 如果这个点不选 就从他的子树里的选或者不选选最大 如果这个点选 就加上他子树的不选 f[x][0] += ...
- [ Python入门教程 ] Python文件基本操作
本文将python文件操作实例进行整理,以便后续取用. 文件打开和创建 Python中使用open()函数打开或创建文件.open()的声明如下: open(name[, mode[, bufferi ...
- shell脚本特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)
$0 Shell本身的文件名$1-$n 添加到Shell的各参数值.$1是第1参数.$2是第2参数…$$ Shell本身的PID(ProcessID) $! ...
- LeetCode 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix (最少翻转次数将二进制矩阵全部置为0)
给一个矩阵mat,每个格子都是0或1,翻转一个格子会将该格子以及相邻的格子(有共同边)全部翻转(0变为1,1变为0) 求问最少需要翻转几次将所有格子全部置为0. 这题的重点是数据范围,比赛结束看了眼数 ...
- vue 学习注意事项
一:插值方式: 1:数据绑定,最常见的形式就是使用 “Mustache” 语法(双大括号)的文本插值 <span>Message: {{ msg }}</span> 通过使用 ...
- linux shell根据端口返回进程号杀死进程的方法
linux shell根据端口返回进程号杀死进程的方法<pre>kill `lsof -t -i:9501`</pre>这个就是杀死9501端口的进程号
- Redux + React-router 的入门和配置教程
(转载)原文链接: https://juejin.im/post/5dcaaa276fb9a04a965e2c9b#heading-18 前言