前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TinyXml的简单使用以及几种数据传输格式的对比

TinyXml的简单使用以及几种数据传输格式的对比

作者头像
yifei_
发布2022-11-14 14:27:19
6080
发布2022-11-14 14:27:19
举报
文章被收录于专栏:yifei的专栏

TinyXml的简单使用以及XML、Json、Protobuf的对比。 之前学习过了JsonCpp和protobuf的简单使用,那这次再来个TinyXML的吧,毕竟XML应用非常广泛。

TinyXml

XML

一个简单地XML文件如下所示,这种数据格式拥有较好的自我描述性,一看就能够明白他的内容是什么。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<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,然后就可以用了。

代码如下:

代码语言:javascript
复制
#include <iostream>
#include <string>
#include "tinyxml.h"
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;
}

输出

代码语言:javascript
复制
向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/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TinyXml
    • XML
      • 使用方法
      • 几种格式对比
        • XML
          • Json
            • protocol buffers
            • 参考
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档