TinyXml的简单使用以及XML、Json、Protobuf的对比。 之前学习过了JsonCpp和protobuf的简单使用,那这次再来个TinyXML的吧,毕竟XML应用非常广泛。
一个简单地XML文件如下所示,这种数据格式拥有较好的自我描述性,一看就能够明白他的内容是什么。
<?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,然后就可以用了。
代码如下:
#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;
}
输出
向message.xml写入一条消息
save sucess
from:Tom
to:Army
title:Hello
text:Hello,Army
load sucess
XML教程 TinyXml官网 TinyXml Documentation C++解析XML c++之TinyXml使用与应用,包含简单的例子
欢迎与我分享你的看法。 转载请注明出处:http://taowusheng.cn/