• 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/8500915,或者到官网下载: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;
    }
        读取结果:
        

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    ---转载或者使用代码,请注明原作者 This is bill
  • 相关阅读:
    20155307 2017-2018-2 《Java程序设计》第2周学习总结
    20155307刘浩——预备作业03: 安装虚拟机
    刘浩(专业打劫三十年)20155307的预备作业02:
    刘浩的预备作业01:我期望的师生关系——————不要问我为什么我叫专业打劫三十年
    List Leaves
    树的同构
    Pop Sequence
    Reversing Linked List
    一元多项式的乘法与加法运算
    Python 基础语法复习
  • 原文地址:https://www.cnblogs.com/ScytheWH/p/4622983.html
Copyright © 2020-2023  润新知