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,解决方案->重定 ...
随机推荐
- leetcode组合总和 Ⅳ 解题路径
题目: 关于动态规划类题目的思路如何找在上一篇博客 https://www.cnblogs.com/niuyourou/p/11964842.html 讲的非常清楚了,该博客也成为了了leetcode ...
- 跨交换机VLAN之间的通信(基于Cisco模拟器)
实验要求: 拓扑结构如下 1.交换机2台:主机4台:网线若干. 2.把主机.交换机进行互联. 3.给2台交换机重命名为A.B. 4.设置2台交换机及主机的ip.注意IP要不冲突 5.在2台交换机上分别 ...
- Linux学习笔记-第2天- 新的开始
迟到且稀疏的笔记,希望自己今年会有所突破.加油
- <Tree.PreOrder> DFS 113, 129
113. Path Sum II 利用DFS的三要素, 出口1,出口2,拆解,记得回溯的时候要回退一位path. class Solution { public List<List<Int ...
- Linux的开机启动流程
Linux的开机启动流程 1.开机BIOS自检 --> 检查CPU,硬盘等硬件信息 2.MBR[Major ...
- [题解向] 正睿Round409
\(\rm Link\) 然而泥萌没有权限是看不了题目的233. \(\rm T1\) 大概就是个map,脑残出题人认为(x,x)不属于有序二元组,我可qtmd.于是只拿了\(\rm 60pts\) ...
- windows7 - windows10开启802.1x md5质询
(win7 win10通用)20190324 全程不需重启 注:如果导入后没有看到md5,那得去注册表看看是否真的有键值(我的一开始提示成功,但是注册表里看不到,后来发现复制时候多了一些不可见的字 ...
- (转)yum只下载不安装软件包
方法一:使用yum的downloadonly插件 步骤: (1) 先安装downloadonly插件 yum install yum-plugin-downloadonly (2)使用–downlo ...
- java --后缀符号
public class Sample { public static void main(String[] args) { , num2 = ; num1--; System.out.println ...
- 第02组 Alpha冲刺(4/6)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 学习如何评估代码质量 准备Al ...