前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TinyXML2读取和创建XML文件

TinyXML2读取和创建XML文件

作者头像
恋喵大鲤鱼
发布2018-08-03 17:32:25
3.8K0
发布2018-08-03 17:32:25
举报
文章被收录于专栏:C/C++基础C/C++基础

TinyXML2是simple、small、efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http://download.csdn.net/detail/k346k346/8500915,或者到官网下载:https://github.com/leethomason/tinyxml2。

使用方法:将tinyxml2.cpp和tinyxml2.h拷贝至项目目录,使用时包含#include "tinyxml2.h"和using namespace tinyxml2;

1.创建XML文件。注意:xml文件必须先创建,可由fopen()进行创建,再交由XMLDocument进行写入操作。

代码语言:javascript
复制
int createTinyXML2(string xmlPath)
代码语言:javascript
复制
{
代码语言:javascript
复制
    FILE* fp=NULL;
代码语言:javascript
复制
    fp=fopen(xmlPath.c_str(),"w+");//创建空xml文件
代码语言:javascript
复制
    fclose(fp);
代码语言:javascript
复制
    XMLDocument doc;
代码语言:javascript
复制
    doc.LoadFile(xmlPath);//载入xml文件
代码语言:javascript
复制
    XMLDeclaration* declaration=doc.NewDeclaration();//添加xml文件头申明
代码语言:javascript
复制
    doc.InsertFirstChild(declaration);
代码语言:javascript
复制
    XMLElement *Root = doc.NewElement("Root");
代码语言:javascript
复制
    doc.InsertEndChild(Root);
代码语言:javascript
复制
    //insert Head
代码语言:javascript
复制
    XMLElement* Head=doc.NewElement("Head");
代码语言:javascript
复制
    Root->InsertEndChild(Head);
代码语言:javascript
复制
    //insert Create_Time
代码语言:javascript
复制
    time_t rawtime;//time_t为long型
代码语言:javascript
复制
    time(&rawtime);//获取从1970.1.1起的秒数
代码语言:javascript
复制
    struct tm *temp = localtime(&rawtime);
代码语言:javascript
复制
    char time_str[32];
代码语言:javascript
复制
    sprintf(time_str, "%04d-%02d-%02d %02d:%02d:%02d", temp->tm_year + 1900, temp->tm_mon + 1, temp->tm_mday,\
代码语言:javascript
复制
       temp->tm_hour, temp->tm_min, temp->tm_sec);
代码语言:javascript
复制
    XMLElement* Create_Time = doc.NewElement("Create_Time");
代码语言:javascript
复制
    Create_Time->InsertFirstChild(doc.NewText(time_str));
代码语言:javascript
复制
    Head->InsertEndChild(Create_Time);
代码语言:javascript
复制
代码语言:javascript
复制
    //insert Algorithm
代码语言:javascript
复制
    XMLElement* Algorithm = doc.NewElement("Algorithm");
代码语言:javascript
复制
    Algorithm->InsertFirstChild(doc.NewText("MD5"));
代码语言:javascript
复制
    Algorithm->SetAttribute("ID",1);
代码语言:javascript
复制
    Head->InsertEndChild(Algorithm);
代码语言:javascript
复制
    //insert cipher_Num
代码语言:javascript
复制
    XMLElement* Cipher_Num = doc.NewElement("Cipher_Num");
代码语言:javascript
复制
    Cipher_Num->InsertFirstChild(doc.NewText("500"));
代码语言:javascript
复制
    Cipher_Num->SetAttribute("ID",2);
代码语言:javascript
复制
    Head->InsertEndChild(Cipher_Num);
代码语言:javascript
复制
代码语言:javascript
复制
    int targetNum=3;
代码语言:javascript
复制
    while (targetNum)
代码语言:javascript
复制
    {
代码语言:javascript
复制
       //insert Target
代码语言:javascript
复制
       Root->InsertEndChild(doc.NewElement("Target"));
代码语言:javascript
复制
       XMLElement* Target = Root->LastChildElement("Target");
代码语言:javascript
复制
代码语言:javascript
复制
       //insert HashValue to Target Node
代码语言:javascript
复制
       XMLElement* HashValue = doc.NewElement("HashValue");
代码语言:javascript
复制
       HashValue->InsertFirstChild(doc.NewText("5555"));
代码语言:javascript
复制
       Target->InsertEndChild(HashValue);
代码语言:javascript
复制
       //insert Salt to Target Node
代码语言:javascript
复制
       XMLElement* Salt = doc.NewElement("Salt");
代码语言:javascript
复制
       Salt->InsertFirstChild(doc.NewText("555"));
代码语言:javascript
复制
       Target->InsertEndChild(Salt);
代码语言:javascript
复制
       targetNum--;
代码语言:javascript
复制
     }
代码语言:javascript
复制
    int result=doc.SaveFile(xmlPath.c_str());
代码语言:javascript
复制
    return result;
代码语言:javascript
复制
}
代码语言:javascript
复制
    结果截图:
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
    2.读取XML文件
代码语言:javascript
复制
代码语言:javascript
复制
int readTinyXML2(string xmlPath)
代码语言:javascript
复制
{
代码语言:javascript
复制
    XMLDocument doc;
代码语言:javascript
复制
    doc.LoadFile(xmlPath.c_str());
代码语言:javascript
复制
    if(doc.Error())
代码语言:javascript
复制
    {
代码语言:javascript
复制
        cout<<"Read "<<xmlPath<<" file failed! "<<endl;
代码语言:javascript
复制
        return -1;
代码语言:javascript
复制
    }
代码语言:javascript
复制
    XMLElement *root = doc.RootElement();
代码语言:javascript
复制
    XMLElement *Head=root->FirstChildElement("Head");
代码语言:javascript
复制
    XMLElement *HeadChildNode=Head->FirstChildElement("Create_Time");
代码语言:javascript
复制
    string Create_Time=HeadChildNode->GetText();
代码语言:javascript
复制
    HeadChildNode=Head->FirstChildElement("Algorithm");
代码语言:javascript
复制
    string Algorithm=HeadChildNode->GetText();
代码语言:javascript
复制
    string AlgorithmID=HeadChildNode->Attribute("ID");
代码语言:javascript
复制
    HeadChildNode=Head->FirstChildElement("Cipher_Num");
代码语言:javascript
复制
    string Cipher_Num=HeadChildNode->GetText();
代码语言:javascript
复制
    string Cipher_NumID=HeadChildNode->Attribute("ID");
代码语言:javascript
复制
代码语言:javascript
复制
    XMLElement *Target=root->FirstChildElement("Target");
代码语言:javascript
复制
    XMLElement *TargetChildNode=NULL;
代码语言:javascript
复制
    int targetNum=3;
代码语言:javascript
复制
    char hash[3][32]={NULL};
代码语言:javascript
复制
    char salt[3][32]={NULL};
代码语言:javascript
复制
    for(int i=0;i<targetNum;i++)
代码语言:javascript
复制
    {
代码语言:javascript
复制
      TargetChildNode=Target->FirstChildElement("HashValue");
代码语言:javascript
复制
      strcpy(hash[i],TargetChildNode->GetText());
代码语言:javascript
复制
      TargetChildNode=Target->FirstChildElement("Salt");
代码语言:javascript
复制
      strcpy(salt[i],TargetChildNode->GetText());
代码语言:javascript
复制
      Target=Target->NextSiblingElement("Target");
代码语言:javascript
复制
    }
代码语言:javascript
复制
    //verify the read result from xml
代码语言:javascript
复制
    std::cout<<"Create_Time:"<<Create_Time<<endl;
代码语言:javascript
复制
    std::cout<<"Algorithm:"<<Algorithm<<" ID:"<<AlgorithmID<<endl;
代码语言:javascript
复制
    std::cout<<"Cipher_Num:"<<Cipher_Num<<" ID:"<<Cipher_NumID<<endl;
代码语言:javascript
复制
    for(int i=0;i<targetNum;i++)
代码语言:javascript
复制
    {
代码语言:javascript
复制
         std::cout<<"hash["<<i<<"]:"<<hash[i]<<endl;
代码语言:javascript
复制
         std::cout<<"salt["<<i<<"]:"<<salt[i]<<endl;
代码语言:javascript
复制
    }
代码语言:javascript
复制
    return 0;
代码语言:javascript
复制
}
代码语言:javascript
复制
    读取结果:
代码语言:javascript
复制
代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年03月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档