第一句子大全,网罗天下好句子,好文章尽在本站!

tinyxml:C++XML解析器的绝佳选择

时间:2024-01-24

下面请跟着小编一起来了解下tinyxml常用的C++XML解析器非常优秀,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析...

友情提示:本文共有 3427 个字,阅读大概需要 7 分钟。

下面请跟着小编一起来了解下tinyxml 常用的C++ XML解析器非常优秀,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

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

如下是一个XML片段:

代码如下:

Persons

Person

name周星星/name

age20/age

/Person

Person

name白晶晶/name

age18/age

/Person

/Persons

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

TiXmlBase:整个TinyXML模型的基类。

TiXmlAttribute:对应于XML中的元素的属性。

TiXmlNode:对应于DOM结构中的节点。

TiXmlComment:对应于XML中的注释

TiXmlDeclaration:对应于XML中的申明部分,即?versiong="1.0" ?。

TiXmlDocument:对应于XML的整个文档。

TiXmlElement:对应于XML的元素。

TiXmlText:对应于XML的文字部分

TiXmlUnknown:对应于XML的未知部分。

TiXmlHandler:定义了针对XML的一些操作。

TinyXML是个解析库,主要由DOM模型类(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作类(TiXmlHandler)构成。它由两个头文件(.h文件)和四个CPP文件(.cpp文件)构成,用的时候,只要将(tinyxml.h、tinystr.h、、、、)导入工程就可以用它的东西了。如果需要,可以将它做成自己的来调用。举个例子就可以说明一切。。。

对应的XML文件:

代码如下:

Persons

Person

namephinecos/name

age22/age

/Person

/Persons

读写XML文件的程序代码:

代码如下:

#include iostream

#include "tinyxml.h"

#include "tinystr.h"

#include string

#includewindows.h

#include atlstr.h

using namespace std;

CString GetAppPath()

{//获取应用程序根目录

TCHAR modulePath[MAX_PATH];

GetModuleFileName(NULL, modulePath, MAX_PATH);

CString strModulePath(modulePath);

strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T()));

return strModulePath;

}

bool CreateXmlFile(string& szFileName)

{//创建xml文件,szFilePath为文件保存的路径,若创建成功返回true,否则false

try

{

//创建一个XML的文档对象。

TiXmlDocument *myDocument = new TiXmlDocument();

//创建一个根元素并连接。

TiXmlElement *RootElement = new TiXmlElement("Persons");

myDocument-LinkEndChild(RootElement);

//创建一个Person元素并连接。

TiXmlElement *PersonElement = new TiXmlElement("Person");

RootElement-LinkEndChild(PersonElement);

//设置Person元素的属性。

PersonElement-SetAttribute("ID", "1");

//创建name元素、age元素并连接。

TiXmlElement *NameElement = new TiXmlElement("name");

TiXmlElement *AgeElement = new TiXmlElement("age");

PersonElement-LinkEndChild(NameElement);

PersonElement-LinkEndChild(AgeElement);

//设置name元素和age元素的内容并连接。

TiXmlText *NameContent = new TiXmlText("周星星");

TiXmlText *AgeContent = new TiXmlText("22");

NameElement-LinkEndChild(NameContent);

AgeElement-LinkEndChild(AgeContent);

CStringappPath = GetAppPath();

string seperator = "";

string fullPath = appPath.GetBuffer(0) +seperator+szFileName;

myDocument-SaveFile(fullPath.c_str());//保存到文件

}

catch (string& e)

{

return false;

}

return true;

}

bool ReadXmlFile(string& szFileName)

{//读取Xml文件,并遍历

try

{

CString appPath = GetAppPath();

string seperator = "";

string fullPath = appPath.GetBuffer(0) +seperator+szFileName;

//创建一个XML的文档对象。

TiXmlDocument *myDocument = new TiXmlDocument(fullPath.c_str());

myDocument-LoadFile();

//获得根元素,即Persons。

TiXmlElement *RootElement = myDocument-RootElement();

//输出根元素名称,即输出Persons。

cout RootElement-Value() endl;

//获得第一个Person节点。

TiXmlElement *FirstPerson = RootElement-FirstChildElement();

//获得第一个Person的name节点和age节点和ID属性。

TiXmlElement *NameElement = FirstPerson-FirstChildElement();

TiXmlElement *AgeElement = NameElement-NextSiblingElement();

TiXmlAttribute *IDAttribute = FirstPerson-FirstAttribute();

//输出第一个Person的name内容,即周星星;age内容,即;ID属性,即。

cout NameElement-FirstChild()-Value() endl;

cout AgeElement-FirstChild()-Value() endl;

cout IDAttribute-Value() endl;

}

catch (string& e)

{

return false;

}

return true;

}

int main()

{

string fileName = "info.xml";

CreateXmlFile(fileName);

ReadXmlFile(fileName);

}

小标题:tinyxml 常用的C++ XML解析器非常优秀

本文如果对你有帮助,请点赞收藏《tinyxml:C++XML解析器的绝佳选择》,同时在此感谢原作者。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(5)
  1. 尽力而为2024-01-24 15:57尽力而为[台湾省网友]103.43.225.75
    tinyxml轻便又高效,绝对是我做项目时必备的神器。
    顶1踩0
  2. 阿火2024-01-24 15:48阿火[湖南省网友]43.229.219.193
    感谢tinyxml,让XML解析变得如此简单,真是程序员的福音啊!
    顶45踩0
  3. ┼哭錵↘素顔2024-01-24 15:39┼哭錵↘素顔[山西省网友]110.76.159.7
    有了tinyxml,XML解析不再头疼,C++开发愉快多了!
    顶44踩0
  4. 汪铁2024-01-24 15:30汪铁[江西省网友]202.149.234.77
    我用过很多XML解析器,但是还是觉得tinyxml最靠谱,推荐给大家。
    顶28踩0
  5. 润生2024-01-24 15:20润生[黑龙江省网友]203.62.246.0
    tinyxml真的太方便了,简单易用,解析XML再也不是难事。
    顶0踩0
相关阅读
c++的string类和C语言中字符操作的区别

c++的string类和C语言中字符操作的区别

我们今天要学习的string类是c++的拓展库,使得我们对字符串的操作变得简单,严格来说是属于字符串对象,这个类库里面有很多对字符串操作的方法,接下来我

2018-06-16 #经典句子

小学生C++趣味编程—第2课春晓「cout语句」

小学生C++趣味编程—第2课春晓「cout语句」

唐代诗人孟浩然所作的春晓是一首家喻户晓的诗,但是校园里更流行的是孩子们自编的春晓

2023-06-01 #经典句子

「趣图」当C 遇上C++ 更受伤的是谁?网友接龙的排比句更扎心

「趣图」当C 遇上C++ 更受伤的是谁?网友接龙的排比句更扎心

尺子,不是用来对齐Python代码的吗?抠鼻我是@程序员小助手,关注我,持续更新每日科技热点

2023-10-25 #经典句子

《和孩子一起学C++》cout语句的使用

《和孩子一起学C++》cout语句的使用

include using namespace std;int main {return 0;}一个C++程序由头文件、命名空间和主函数构成

2023-12-14 #经典句子

学C++ 80%都是为了搞竞赛 凑一门语言?网友:莫钓鱼

学C++ 80%都是为了搞竞赛 凑一门语言?网友:莫钓鱼

金磊 发自 凹非寺量子位 报道 | 公众号 QbitAI年近40岁的C++,已经Out了?甚至还有种观点说:大部分写工程不用C++,学习这个语言只是为了竞赛话题

2023-12-04 #经典句子

所有程序员都必须知道的语言!C++之基本结构

所有程序员都必须知道的语言!C++之基本结构

其中名为main的函数称为主函数,可以将它放在程序的任何位置

2023-11-22 #经典句子

2021年知到国际经济学(双语)(山东联盟)章节答案

2021年知到国际经济学(双语)(山东联盟)章节答案

A 单位主要负责人B 企业投资人C 企业D 安全管理部门负责人低年┨▅関注▇┨级儿童难以深刻理解学习的决定┨▅公▇┨教育性质的因素是A.政教育┨▅众▇┨

2023-09-06 #经典句子

知道跨文化交际答案

知道跨文化交际答案

A 证券投资基金等同于证券投资信托民法总则Ⅱ▍関注▓Ⅱ规定,十六周岁以从业人员的Ⅱ▍公众▓Ⅱ紧急撤离权,是指其工伤保险Ⅱ▍号

2023-04-29 #经典句子

「中考真题解析」湖北荆州说明文《阿尔法狗凭什么打败世界冠军》

「中考真题解析」湖北荆州说明文《阿尔法狗凭什么打败世界冠军》

中考真题解析19 2分这篇文章标题很有意思,说说你的发现。思路分析:本题考查的是题目的作用。因为题目是问句,用问句作标题可以引人思考,激发读者的阅

2023-08-02 #经典句子