其他
TinyXML2 使用方法及示例
(给CPP开发者加星标,提升C/C++技能)
来源:凉_白开 blog.csdn.net/liang_baikai/article/details/78783839
【导读】:是我们常用的 XML 文件解析库,文本主要讲解 TinyXML2 这个优秀的 XML文件解析库,不熟悉的朋友们快来学习下吧。
以下正文
概述
TinyXML2 是简单实用的开源的 C++ XML 文件解析库,可以很方便的应用到现有的项目之中。
TinyXML2 解析器相对 TinyXML1 在代码上是完全重写,使其更适合于游戏开发中使用。它使用更少的内存,更快,并使用更少的内存分配。
说明
xml类似数据库,一般来说对数据库有什么操作,那么对xml文件也能实现什么操作。
数据库增删查改对应xml文件就是新建xml文件、增加xml文件节点,删除xml文件节点,查询xml文件指定节点的值,修改xml文件中节点的值。
使用方法
将tinyxml2.cpp和tinyxml2.h拷贝至项目目录,使用时包含
#include "tinyxml2.h"
using namespace tinyxml2
创建XML文件
int createXML(const char* xmlPath)
{
XMLDocument doc;
if(3 != doc.LoadFile(xmlPath))
{
cout <<"file has been existed !"<<endl;
return 0;
}
//添加申明可以使用如下两行
XMLDeclaration* declaration=doc.NewDeclaration();
doc.InsertFirstChild(declaration);
XMLElement* root=doc.NewElement("XMLUSER");
doc.InsertEndChild(root);
XMLElement* userNode = doc.NewElement("User");
/*添加属性*/
userNode->SetAttribute("Name","liangbaikai");
userNode->SetAttribute("Password ","bbbbbb");
root->InsertEndChild(userNode);
return doc.SaveFile(xmlPath);
}
int main( int argc, const char ** argv )
{
/*创建*/
createXML("./xml/bbb.xml");
/*增*/
//addXML1("./xml/bbb.xml");/*添加性别,号码,邮箱*/ /*再添加一个用户*/
//addXML2("./xml/bbb.xml");/*在性别后面添加年龄,再添加一个号码*/
/*删*/
//deleteXML("./xml/bbb.xml");/*删除第一个号码,删除第二个号码的属性*/
/*改*/
//changeXML("./xml/bbb.xml");/*将liangbaikai的年龄改为10000岁,将wenbaikai的号码改为8888结尾*/
/*查*/
//selectXML("./xml/bbb.xml");/*将liangbaikai的信息打印出来*/
return 0;
}
生成的文件如下
<?xml version="1.0" encoding="UTF-8"?>
<XMLUSER>
<User Name="liangbaikai" Password ="bbbbbb"/>
</XMLUSER>
增
int addXML1(const char* xmlPath)
{
XMLDocument doc;
if(doc.LoadFile(xmlPath) != 0)
{
cout<<"load xml file failed"<<endl;
return false;
}
XMLElement* root=doc.RootElement();
XMLElement* userNode=root->FirstChildElement("User");
XMLElement* gender = doc.NewElement("Gender");
XMLText* genderText=doc.NewText("man");
gender->InsertFirstChild(genderText);
userNode->InsertFirstChild(gender);
XMLElement* mobile = doc.NewElement("Mobile");
mobile->InsertFirstChild(doc.NewText("188****6211"));
userNode->InsertEndChild(mobile);
XMLElement* email = doc.NewElement("Email");
email->InsertFirstChild(doc.NewText("1157***657@qq.com"));
userNode->InsertEndChild(email);
XMLElement* userNode1 = doc.NewElement("User");
userNode1->SetAttribute("Name","Wenbaikai");
userNode1->SetAttribute("Password ","aaaaa");
root->InsertEndChild(userNode1);
XMLElement* mobile1 = doc.NewElement("Mobile");
mobile1->InsertFirstChild(doc.NewText("166****6666"));
userNode1->InsertEndChild(mobile1);
return doc.SaveFile(xmlPath);
}
int addXML2(const char* xmlPath)
{
XMLDocument doc;
if(doc.LoadFile(xmlPath) != 0)
{
cout<<"load xml file failed"<<endl;
return false;
}
XMLElement* root=doc.RootElement();
XMLElement* userNode=root->FirstChildElement("User");
XMLElement*gender = userNode->FirstChildElement("Gender");
XMLElement* age = doc.NewElement("Age");
age->InsertFirstChild(doc.NewText("18"));
userNode->InsertAfterChild(gender,age);
XMLElement*mobile = userNode->FirstChildElement("Mobile");
mobile->SetAttribute("Location","home");
XMLElement* mobile1 = doc.NewElement("Mobile");
mobile1->SetAttribute("Location","company");
mobile1->InsertFirstChild(doc.NewText("188****8888"));
userNode->InsertAfterChild(mobile,mobile1);
return doc.SaveFile(xmlPath);
}
int main( int argc, const char ** argv )
{
/*创建*/
createXML("./xml/bbb.xml");
/*增*/
addXML1("./xml/bbb.xml");/*添加性别,号码,邮箱*/ /*再添加一个用户*/
addXML2("./xml/bbb.xml");/*在性别后面添加年龄,再添加一个号码*/
/*删*/
//deleteXML("./xml/bbb.xml");/*删除第一个号码,删除第二个号码的属性*/
/*改*/
//changeXML("./xml/bbb.xml");/*将liangbaikai的年龄改为10000岁,将wenbaikai的号码改为8888结尾*/
/*查*/
//selectXML("./xml/bbb.xml");/*将liangbaikai的信息打印出来*/
return 0;
}
效果如下
<?xml version="1.0" encoding="UTF-8"?>
<XMLUSER>
<User Name="liangbaikai" Password="bbbbbb">
<Gender>man</Gender>
<Age>18</Age>
<Mobile Location="home">188****6211</Mobile>
<Mobile Location="company">188****8888</Mobile>
<Email>1157***657@qq.com</Email>
</User>
<User Name="Wenbaikai" Password="aaaaa">
<Mobile>166****6666</Mobile>
</User>
</XMLUSER>
删
int deleteXML(const char* xmlPath)
{
XMLDocument doc;
if(doc.LoadFile(xmlPath) != 0)
{
cout<<"load xml file failed"<<endl;
return false;
}
XMLElement* root=doc.RootElement();
XMLElement* userNode=root->FirstChildElement("User");
XMLElement*mobile = userNode->FirstChildElement("Mobile");
userNode->DeleteChild(mobile);
XMLElement*mobile1 = userNode->FirstChildElement("Mobile");
mobile1->DeleteAttribute("Location");
return doc.SaveFile(xmlPath);
}
int main( int argc, const char ** argv )
{
/*创建*/
createXML("./xml/bbb.xml");
/*增*/
addXML1("./xml/bbb.xml");/*添加性别,号码,邮箱*/ /*再添加一个用户*/
addXML2("./xml/bbb.xml");/*在性别后面添加年龄,再添加一个号码*/
/*删*/
deleteXML("./xml/bbb.xml");/*删除第一个号码,删除第二个号码的属性*/
/*改*/
//changeXML("./xml/bbb.xml");/*将liangbaikai的年龄改为10000岁,将wenbaikai的号码改为8888结尾*/
/*查*/
//selectXML("./xml/bbb.xml");/*将liangbaikai的信息打印出来*/
return 0;
}
效果如下
<?xml version="1.0" encoding="UTF-8"?>
<XMLUSER>
<User Name="liangbaikai" Password="bbbbbb">
<Gender>man</Gender>
<Age>18</Age>
<Mobile>188****8888</Mobile>
<Email>1157***657@qq.com</Email>
</User>
<User Name="Wenbaikai" Password="aaaaa">
<Mobile>166****6666</Mobile>
</User>
</XMLUSER>
改
int changeXML(const char* xmlPath)
{
XMLDocument doc;
if(doc.LoadFile(xmlPath)!=0)
{
cout<<"load xml file failed"<<endl;
return false;
}
XMLElement* root=doc.RootElement();
XMLElement* userNode=root->FirstChildElement("User");
while(userNode != NULL)
{
if( 0 == strncmp("liangbaikai",(userNode->Attribute("Name")),11))
{
userNode->FirstChildElement("Age")->SetText("10000");
userNode = userNode->NextSiblingElement();
}
else if(( 0 == strncmp("Wenbaikai",(userNode->Attribute("Name")),11)))
{
userNode->FirstChildElement("Mobile")->SetText("166****8888");
userNode = userNode->NextSiblingElement();
}
else
{
userNode = userNode->NextSiblingElement();
}
}
return doc.SaveFile(xmlPath);
}
int main( int argc, const char ** argv )
{
/*创建*/
createXML("./xml/bbb.xml");
/*增*/
addXML1("./xml/bbb.xml");/*添加性别,号码,邮箱*/ /*再添加一个用户*/
addXML2("./xml/bbb.xml");/*在性别后面添加年龄,再添加一个号码*/
/*删*/
deleteXML("./xml/bbb.xml");/*删除第一个号码,删除第二个号码的属性*/
/*改*/
changeXML("./xml/bbb.xml");/*将liangbaikai的年龄改为10000岁,将wenbaikai的号码改为8888结尾*/
/*查*/
//selectXML("./xml/bbb.xml");/*将liangbaikai的信息打印出来*/
return 0;
}
效果如下
<?xml version="1.0" encoding="UTF-8"?>
<XMLUSER>
<User Name="liangbaikai" Password="bbbbbb">
<Gender>man</Gender>
<Age>10000</Age>
<Mobile>188****8888</Mobile>
<Email>1157***657@qq.com</Email>
</User>
<User Name="Wenbaikai" Password="aaaaa">
<Mobile>166****8888</Mobile>
</User>
</XMLUSER>
查
int selectXML(const char* xmlPath)
{
XMLDocument doc;
if(doc.LoadFile(xmlPath)!=0)
{
cout<<"load xml file failed"<<endl;
return false;
}
XMLElement* root=doc.RootElement();
XMLElement* userNode=root->FirstChildElement("User");
while(userNode != NULL)
{
if( 0 == strncmp("liangbaikai",(userNode->Attribute("Name")),11))
{
cout << userNode->Attribute("Name") << endl;
cout << userNode->Attribute("Password") << endl;
cout << userNode->FirstChildElement("Age")->GetText() << endl;
cout << userNode->FirstChildElement("Gender")->GetText() << endl;
cout << userNode->FirstChildElement("Mobile")->GetText() << endl;
cout << userNode->FirstChildElement("Email")->GetText() << endl;
userNode = userNode->NextSiblingElement();
}
else
{
userNode = userNode->NextSiblingElement();
}
}
return 0;
}
int main( int argc, const char ** argv )
{
/*创建*/
createXML("./xml/bbb.xml");
/*增*/
addXML1("./xml/bbb.xml");/*添加性别,号码,邮箱*/ /*再添加一个用户*/
addXML2("./xml/bbb.xml");/*在性别后面添加年龄,再添加一个号码*/
/*删*/
deleteXML("./xml/bbb.xml");/*删除第一个号码,删除第二个号码的属性*/
/*改*/
changeXML("./xml/bbb.xml");/*将liangbaikai的年龄改为10000岁,将wenbaikai的号码改为8888结尾*/
/*查*/
selectXML("./xml/bbb.xml");/*将liangbaikai的信息打印出来*/
return 0;
}
效果如下
liangbaikai
bbbbbb
10000
man
188****8888
1157***657@qq.com
- EOF -
关于TinyXML2使用方法,欢迎在评论中和我探讨。觉得文章不错,请点赞和在看支持我继续分享好文。谢谢!
关注『CPP开发者』
看精选C++技术文章 . 加C++开发者专属圈子
↓↓↓
点赞和在看就是最大的支持❤️