TinyXml的简单使用以及XML、Json、Protobuf的对比。
之前学习过了JsonCpp和protobuf的简单使用,那这次再来个TinyXML的吧,毕竟XML应用非常广泛。
TinyXml
XML
一个简单地XML文件如下所示,这种数据格式拥有较好的自我描述性,一看就能够明白他的内容是什么。1
2
3
4
5
6
7"1.0" encoding="UTF-8" xml version=
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML必须要有root元素,并且每一个标签要成对出现。
可以在这个网站了解XML基础知识。
使用方法
- TinyXml是一个简单易用的XML解析库,用的时候把tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp六个文件放到项目的目录下,然后在cpp文件中include这个头文件tinyxml.h,然后就可以用了。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using namespace std;
bool saveXML(string filename){
TiXmlDocument doc;
TiXmlElement *root=new TiXmlElement("root");
doc.LinkEndChild(root);
TiXmlElement *elem1=new TiXmlElement("from");
TiXmlElement *elem2=new TiXmlElement("to");
TiXmlElement *elem3=new TiXmlElement("title");
TiXmlElement *elem4=new TiXmlElement("text");
TiXmlText *t1=new TiXmlText("Tom");
TiXmlText *t2=new TiXmlText("Army");
TiXmlText *t3=new TiXmlText("Hello");
TiXmlText *t4=new TiXmlText("Hello,Army");
root->LinkEndChild(elem1);
root->LinkEndChild(elem2);
root->LinkEndChild(elem3);
root->LinkEndChild(elem4);
elem1->LinkEndChild(t1);
elem2->LinkEndChild(t2);
elem3->LinkEndChild(t3);
elem4->LinkEndChild(t4);
bool sucess=doc.SaveFile(filename.c_str());
doc.Clear();
return sucess;
}
bool loadXML(string filename){
TiXmlDocument doc;
if(!doc.LoadFile(filename.c_str())){
cout<<"load error"<<endl;
return false;
}
TiXmlElement *root=doc.FirstChildElement();
if(root==nullptr){
cout<<"no root element"<<endl;
return false;
}
for(TiXmlElement *elem=root->FirstChildElement();
elem!=nullptr;
elem=elem->NextSiblingElement()){
cout<<elem->Value()<<":";
cout<<elem->FirstChild()->Value()<<endl;
}
return true;
}
int main()
{
cout<<"向message.xml写入一条消息"<<endl;
cout<<(saveXML("message.xml") ? "save sucess" : "save failure")<<endl;
cout<<endl;
cout<<(loadXML("message.xml") ? "load sucess" : "load failure")<<endl;
return 0;
}输出
1
2
3
4
5
6
7
8向message.xml写入一条消息
save sucess
from:Tom
to:Army
title:Hello
text:Hello,Army
load sucess
几种格式对比
- XML、Json、Protobuf几种格式还是各有优劣的,都有不同的适应场合。
XML
- Extensible Markup Language 可扩展标记语言
- 出现在1998年,时间较早,应用广泛
- 与平台无关
- 为了解决HTML无法描述数据、可读性差、搜索时间长等问题而出现
- 自描述性较好
- 可扩展性好,能够轻松地增加字段
- 相对来说速度并不快
Json
- JavaScript Object Notation, JS对象简谱
- 在2005年-2006年正式成为主流的数据格式。
- 层次结构简洁清晰,易于阅读和编写,应用广泛
- 速度较快,但不够快
protocol buffers
- Google的一种独立的数据交换格式,后起之秀,有多种语言的版本
- Early 2001 (internal); July 7, 2008 (public)
- 速度非常块,占用空间很小,适合对时间要求严格的情况
- 但是数据是二进制存储,需要解码才能看到内容
参考
XML教程
TinyXml官网
TinyXml Documentation
C++解析XML
c++之TinyXml使用与应用,包含简单的例子
欢迎与我分享你的看法。
转载请注明出处:http://taowusheng.cn/