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,解决方案->重定 ...
随机推荐
- 语音识别:从 WaveNet 到 Tacotron,再到 RNN-T
从 WaveNet 到 Tacotron,再到 RNN-T 谷歌再获语音识别新进展:利用序列转导来实现多人语音识别和说话人分类 雷锋网 AI 科技评论按:从 WaveNet 到 Tacotron,再到 ...
- LeetCode 139. Word Break单词拆分 (C++)
题目: Given a non-empty string s and a dictionary wordDict containing a list of non-emptywords, determ ...
- Shell编程——环境变量
在Shell程序启动时会自动定义一组变量,这组变量就是环境变量,系统中的所有命令都可以使用这些变量参数. 1.如果在父Shell定义环境变量,在子Shell中也能查看到. (1)父Shell与子She ...
- css3中@font-face模块自定义字体
一.@font-face模块介绍 @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,在Web的开发中使用字体不再只能使用W ...
- oracle--介质恢复和实例恢复的基本概念
1.概念 REDO LOG是Oracle为确保已经提交的事务不会丢失而建立的一个机制.实际上REDO LOG的存在是为两种场景准备的,一种我们称之为实例恢复(INSTANCE RECOVERY),一种 ...
- 原创|强大!Nginx 配置在线一键生成“神器”
Nginx作为一个轻量级的HTTP服务器,相比Apache优势也是比较明显的,在性能上它占用资源少,能支持更高更多的并发连接,从而达到提高访问效率;在功能上它是一款非常优秀的代理服务器与负载均衡服务器 ...
- SpringBoot 系列教程自动配置选择生效
191214-SpringBoot 系列教程自动配置选择生效 写了这么久的 Spring 系列博文,发现了一个问题,之前所有的文章都是围绕的让一个东西生效:那么有没有反其道而行之的呢? 我们知道可以通 ...
- vertica 中位数函数 MEDIAN 的使用
中位数函数:MEDIAN 使用表达式:MEDIAN ( expression ) OVER ( [ window‑partition‑clause ] ) 准备测试数据: ), name ), sal ...
- Mybatis成为Java互联网时代首选持久框架的原因
持久层可以将业务数据存储到磁盘,具备长期存储能力,只要磁盘不损坏(大部分的重要数据都会有相关的备份机制),在断电或者其他情况下,重新开启系统仍然可以读取这些数据.一般执行持久任务的都是数据库系统.持久 ...
- Ansible17:Playbook之tags
目录 简介 为task打tag 使用tag 执行指定tag的task 排除指定tag的task 查看playbook中的所有tag 打tag的几种方式 ansible内置tag 简介 在大型项目当中, ...