TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏 TinyXML2是simple、small、efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http://download.csdn.net/detail/k346k346/,或者到官网下载:https://github.com/leethomason/tinyxml2。 使用方法:将tinyxml2.cpp和tinyxml2.h拷贝至项目目录,使用时包含#include “tinyxml2.h”和using namespace tinyxml2; 1.创建XML文件。注意:xml文件必须先创建,可由fopen()进行创建,再交由XMLDocument进行写入操作。 int createTinyXML2(string xmlPath) { FILE* fp=NULL; fp=fopen(xmlPath.c_str(),”w+”);//创建空xml文件 fclose(fp); XMLDocument doc; doc.LoadFile(xmlPath);//载入xml文件 XMLDeclaration* declaration=doc.NewDeclaration();//添加xml文件头申明 doc.InsertFirstChild(declaration); XMLElement *Root = doc.NewElement(“Root”); doc.InsertEndChild(Root); //insert Head XMLElement* Head=doc.NewElement(“Head”); Root->InsertEndChild(Head); //insert Create_Time time_t rawtime;//time_t为long型 time(&rawtime);//从1970.1.1起的秒数 struct tm *temp = localtime(&rawtime); char time_str[32]; sprintf(time_str, “%04d-%02d-%02d %02d:%02d:%02d”, temp->tm_year + 1900, temp->tm_mon + 1, temp->tm_mday, temp->tm_hour, temp->tm_min, temp->tm_sec); XMLElement* Create_Time = doc.NewElement(“Create_Time”); Create_Time->InsertFirstChild(doc.NewText(time_str)); Head->InsertEndChild(Create_Time); //insert Algorithm XMLElement* Algorithm = doc.NewElement(“Algorithm”); Algorithm->InsertFirstChild(doc.NewText(“MD5”)); Algorithm->SetAttribute(“ID”,1); Head->InsertEndChild(Algorithm); //insert cipher_Num XMLElement* Cipher_Num = doc.NewElement(“Cipher_Num”); Cipher_Num->InsertFirstChild(doc.NewText(“500”)); Cipher_Num->SetAttribute(“ID”,2); Head->InsertEndChild(Cipher_Num); int targetNum=3; while (targetNum) { //insert Target Root->InsertEndChild(doc.NewElement(“Target”)); XMLElement* Target = Root->LastChildElement(“Target”); //insert HashValue to Target Node XMLElement* HashValue = doc.NewElement(“HashValue”); HashValue->InsertFirstChild(doc.NewText(“5555”)); Target->InsertEndChild(HashValue); //insert Salt to Target Node XMLElement* Salt = doc.NewElement(“Salt”); Salt->InsertFirstChild(doc.NewText(“555”)); Target->InsertEndChild(Salt); targetNum–; } int result=doc.SaveFile(xmlPath.c_str()); return result; } 结果截图:
2.读取XML文件 int readTinyXML2(string xmlPath) { XMLDocument doc; doc.LoadFile(xmlPath.c_str()); if(doc.Error()) { cout<<“Read “<<xmlPath<<” file failed! “<<endl; return -1; } XMLElement *root = doc.RootElement(); XMLElement *Head=root->FirstChildElement(“Head”); XMLElement *HeadChildNode=Head->FirstChildElement(“Create_Time”); string Create_Time=HeadChildNode->GetText(); HeadChildNode=Head->FirstChildElement(“Algorithm”); string Algorithm=HeadChildNode->GetText(); string AlgorithmID=HeadChildNode->Attribute(“ID”); HeadChildNode=Head->FirstChildElement(“Cipher_Num”); string Cipher_Num=HeadChildNode->GetText(); string Cipher_NumID=HeadChildNode->Attribute(“ID”); XMLElement *Target=root->FirstChildElement(“Target”); XMLElement *TargetChildNode=NULL; int targetNum=3; char hash[3][32]={NULL}; char salt[3][32]={NULL}; for(int i=0;i<targetNum;i++) { TargetChildNode=Target->FirstChildElement(“HashValue”); strcpy(hash[i],TargetChildNode->GetText()); TargetChildNode=Target->FirstChildElement(“Salt”); strcpy(salt[i],TargetChildNode->GetText()); Target=Target->NextSiblingElement(“Target”); } //verify the read result from xml std::cout<<“Create_Time:”<<Create_Time<<endl; std::cout<<“Algorithm:”<<Algorithm<<” ID:”<<AlgorithmID<<endl; std::cout<<“Cipher_Num:”<<Cipher_Num<<” ID:”<<Cipher_NumID<<endl; for(int i=0;i<targetNum;i++) { std::cout<<“hash[“<<i<<“]:”<<hash[i]<<endl; std::cout<<“salt[“<<i<<“]:”<<salt[i]<<endl; } return 0; } 读取结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/77127.html