MFC中TinyXml的用法

前言

这几天练习MFC的时候,要把各个对话框的数据储存起来,于是就要用到Xml文件(储存数据类文件),国内有好多开源的XML代码,后来决定了TinyXML,不用设置链接器什么的,只要把6个文件(两个头文件,4个CPP文件)加到自己工程里就行了(注意:把#define TIXML_USE_STL YES 这句宏定义加到上面俩个头文件里,方便使用C++ STL,把#include 和#include “tinystr.h”放到自己添加类中),趁现在还记得,赶紧记下来。

    [TinyXML](https://sourceforge.net/projects/tinyxml/)下载地址
  • 环境VS2010
  • 单文档
  • 添加6个Tiny文件至自己的工程
  • 添加cstring和tinystr.h到自己的类中

代码

我把创建Xml文件和写文件两个内容分开了,当然也可以合在一起。

yourDoc.cpp

    CXml XmlFile;
    XmlFile.CreatXml();
    XmlFile.WriteXmlFile();
    XmlFile.ReadXmlFile();
    XmlFile.ReplaceXmlFile();
    XmlFile.DeleteXmlFile();

your.h

public:
    CXml(void);
    ~CXml(void);
    const bool CreatXml();//创造XML文件
    const bool WriteXmlFile();//往XML里写内容
    const bool ReadXmlFile();//读XML里的文件
    const bool ReplaceXmlFile();//往XML插入内容
    const bool DeleteXmlFile();//删除内容

your.cpp

const bool CXml::CreatXml(){
    TiXmlDocument mydoc("Data.xml");//xml文档对象  
    bool loadOk = mydoc.LoadFile();//加载文档  
    if(!loadOk)  {  
        TiXmlDocument *CreatDoc = new TiXmlDocument; //xml文档指针 
        TiXmlDeclaration *decl = new TiXmlDeclaration("1.0", "UTF-8", "yes");  
        CreatDoc->LinkEndChild(decl); //写入文档  

        TiXmlElement *RootElement = new TiXmlElement("school");//根元素  元素名称为school
        CreatDoc->LinkEndChild(RootElement);  //写入根元素

        CreatDoc->SaveFile("Data.xml");//保存xml文档
        delete CreatDoc;
    }
    return 1;
}
const bool CXml::WriteXmlFile(){
    TiXmlDocument mydoc("Data.xml");//xml文档对象  
    bool loadOk=mydoc.LoadFile();//加载文档  
    if(!loadOk)  {  
        AfxMessageBox("could not load the test file.Error:");//多字节字符集
        //AfxMessageBox(L"could not load the test file.Error:");//Unicode字符集
        return 0;  
    }  
    TiXmlElement *RootElement=mydoc.RootElement();//指向根目录
    TiXmlElement* pNode  = NULL;//建立一个空的元素指针
    pNode = RootElement->FirstChildElement("Class");//指向根目录第一个名为"Class"的元素
    if(!pNode){
        TiXmlElement *Class = new TiXmlElement("Class");
        Class->SetAttribute("name","Electrical & Information Engineering one ");
        RootElement->LinkEndChild(Class);

        TiXmlElement *a_chou = new TiXmlElement("a_chou");
        a_chou->SetAttribute("NO.","1");
        a_chou->SetAttribute("sex","male");
        Class->LinkEndChild(a_chou);

        TiXmlElement *dong_ge = new TiXmlElement("dong_ge");
        dong_ge->SetAttribute("NO.","2");//不知道为什么打英文的冒号,XML不会显示
        dong_ge->SetAttribute("sex","male");
        Class->LinkEndChild(dong_ge);

        TiXmlElement *hei_pi = new TiXmlElement("hei_pi");
        hei_pi->SetAttribute("NO.","3");
        hei_pi->SetAttribute("sex","male");
        Class->LinkEndChild(hei_pi);
    }
    mydoc.SaveFile("Data.xml");

    return 1;

}
const bool CXml::ReadXmlFile(){
    TiXmlDocument mydoc("Data.xml");//xml文档对象  
    bool loadOk=mydoc.LoadFile();//加载文档  
    if(!loadOk)  {  
        AfxMessageBox("could not load the test file.Error:");
        return 0;  
    }  
    TiXmlElement *RootElement=mydoc.RootElement();
    TiXmlElement *Class = RootElement->FirstChildElement("Class");//第一个子元素 

    TiXmlElement* StuElement  = NULL;//建立一个空的元素指针
    StuElement = Class->FirstChildElement("a_chou");

    TiXmlAttribute *pAttr1=StuElement->FirstAttribute();//第一个属性  
    //yourVariable1 = pAttr1->Value();    //yourVariable是你要查看的内容所赋值到的变量
    StuElement = StuElement->NextSiblingElement();

    TiXmlAttribute *pAttr2=StuElement->FirstAttribute();
    //yourVariable2 = pAttr2->Value();    
    StuElement = StuElement->NextSiblingElement();

    TiXmlAttribute *pAttr3=StuElement->FirstAttribute();
    //yourVariable3 = pAttr3->Value();    
    StuElement = StuElement->NextSiblingElement();

    return 1;
}
const bool CXml::ReplaceXmlFile(){
    TiXmlDocument mydoc("Data.xml");//xml文档对象  
    bool loadOk=mydoc.LoadFile();//加载文档  
    if(!loadOk)  {  
        AfxMessageBox("could not load the test file.Error:");//多字节字符集
        //AfxMessageBox(L"could not load the test file.Error:");//Unicode字符集
        return 0;  
    }  
    TiXmlElement *RootElement=mydoc.RootElement();//指向根目录
    TiXmlElement* pNode  = NULL;//建立一个空的元素指针
    TiXmlElement* pPNode  = NULL;//建立一个空的元素指针
    pPNode = RootElement->FirstChildElement("Class");//指向根目录第一个名为Class的元素
    pNode = pPNode->FirstChildElement("hei_pi");//指向根目录第一个名为hei_pi的元素
    if(pNode){//如果存在hei_pi的话
        TiXmlElement *low_b = new TiXmlElement("low_b");
        low_b->SetAttribute("NO.","4");  
        low_b->SetAttribute("sex","male");
        pNode->LinkEndChild(low_b); 
        pPNode->ReplaceChild(pNode,*low_b);//将后者代替前者
    }
    mydoc.SaveFile("Data.xml");
    return 1;
}
const bool CXml::DeleteXmlFile(){
    TiXmlDocument mydoc("Data.xml");//xml文档对象  
    bool loadOk=mydoc.LoadFile();//加载文档  
    if(!loadOk)  {  
        AfxMessageBox("could not load the test file.Error:");//多字节字符集
        //AfxMessageBox(L"could not load the test file.Error:");//Unicode字符集
        return 0;  
    }  
    TiXmlElement *RootElement=mydoc.RootElement();//指向根目录
    TiXmlNode* pNode  = NULL;//建立一个空的元素指针
    TiXmlNode* pPNode  = NULL;//建立一个空的元素指针
    pPNode = RootElement->FirstChildElement("Class");//指向根目录第一个名为Class的元素
    pNode = pPNode->LastChild();//指向Class的最后一个子元素
    pPNode -> RemoveChild(pNode);//移除该指针
    mydoc.SaveFile("Data.xml");//保存文件
    return 1;
}

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

参考文章

http://blog.csdn.net/tennysonsky/article/details/48630005
http://blog.csdn.net/dev_linux/article/details/50161339
http://www.grinninglizard.com/tinyxmldocs/tutorial0.html
http://blog.sina.com.cn/s/blog_69e905cd0100kslw.html
http://blog.csdn.net/bingxuebage/article/details/5853989 各类函数
http://www.cppblog.com/elva/archive/2010/01/17/47907.html

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MFC是微软基于Windows操作系统开发的一套应用程序框架,用于简化Windows GUI应用程序的开发过程,其包括控件、界面设计、消息传递等功能。而TinyXML是一个轻量级的XML解析库,用于解析和处理XML文件。 MFCTinyXML可以互相结合使用,以便更方便地处理XML文件。在MFC使用TinyXML,我们需要包含TinyXML的头文件和库文件,并将其集成到MFC项目。然后,我们可以使用TinyXML提供的API来解析XML文件、查找XML节点、读取和修改XML节点的属性和文本内容,以及创建新的XML节点等操作。 通过结合MFCTinyXML,我们可以在MFC应用程序轻松地读取和解析XML配置文件,例如读取和设置应用程序的一些设置项、存储和加载用户的数据等。同时,我们也可以使用TinyXML来生成、修改和保存XML文件,例如将应用程序的数据导出为XML文件、从XML文件加载数据等。 总之,MFCTinyXML的结合可以使MFC应用程序更加灵活和便捷地处理XML文件。无论是读取、解析还是生成和编辑XML文件,MFCTinyXML都提供了简单易用的接口,帮助开发者在Windows平台上进行XML文件的处理。 ### 回答2: MFC(Microsoft Foundation Class)是微软公司开发的一套C++类库,用于在Windows操作系统上开发图形用户界面应用程序。它提供了一系列的封装类,简化了Windows编程的复杂性,使开发者能够更加方便地创建窗口、控件以及处理用户交互等操作。 TinyXML是一个轻量级的C++ XML解析器,它能够在内存解析XML文件,并提供了便利的接口来访问和操作XML文档的内容。TinyXML可以很好地与MFC集成使用,可以方便地将XML文档的数据存储到MFC程序的数据结构,或将MFC程序的数据保存为XML文件。 MFC的封装类提供了与文件操作相关的功能,而TinyXML提供了解析和操作XML文件的能力。在MFC程序使用TinyXML,可以通过调用其提供的接口,实现读取、写入和修改XML文件的功能。例如,可以使用TinyXMLMFC程序的数据存储为XML文档,然后在需要时将其读取回来进行处理;或者可以读取外部的XML文件,并将其内容解析并存储到MFC程序的数据结构,以供程序进一步使用。 MFCTinyXML的结合可以为MFC程序添加XML处理的能力,方便地读取和存储配置文件、数据文件等内容。同时,由于TinyXML的轻量级特性,它对内存的占用较小,解析效率也较高,使得MFC程序在处理XML文件时能够更加高效和灵活。总而言之,MFCTinyXML的结合为开发人员提供了一种简便而有效的方式来处理XML数据。 ### 回答3: MFC TinyXML是一个用于处理XML文件的小型C++库。它基于MFC框架,提供了简洁的API和易于使用的接口,使开发人员可以轻松地读取、写入和操作XML文档。 MFC TinyXML使用DOM(文档对象模型)的方式来解析XML文件。它可以将XML文档加载到内存并创建一个层次结构的节点树,开发者可以通过遍历树状结构来访问和修改XML文件的内容。MFC TinyXML还支持XPath,这是一种通过路径来定位和选择XML节点的语言。开发人员可以使用XPath表达式来准确定位所需的节点,从而更加灵活地处理XML文档。 除了基本的读写功能,MFC TinyXML还提供了一些特性,如错误处理和UTF-8编码的支持。错误处理功能可以帮助开发人员在XML解析过程捕获和处理错误,确保程序的稳定性。而UTF-8编码的支持则使得MFC TinyXML可以正确地处理不同语言和字符集的XML文件。 总之,MFC TinyXML是一个轻量级、方便易用的XML处理库,特别适合在MFC框架下开发的应用程序使用。无论是读取配置文件、解析数据、还是生成XML报告,MFC TinyXML都可以帮助开发人员快速、高效地完成相关任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值