TinyXML2使用方法及示例

TinyXML2使用方法及示例转自https://blog.csdn.net/liang_baikai/article/details/78783839概述 TinyXML2是简单实用的开源的C++XML文件解析库,可以很方便的应用到现有的项目之中。  TinyXML2解析器相对TinyXML1在代码上是完全重写,使其更适合于游戏开发中使用。它使用更少的内存,更快,并使用更少的内存分配。说明 xml类似数据库,…

大家好,又见面了,我是你们的朋友全栈君。

转自https://blog.csdn.net/liang_baikai/article/details/78783839

概述
 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
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134419.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 推荐两款程序员必备的画图神器

    缘起最近经常有伙伴问我,作为程序员,有没有好的画图工具推荐,领导说Microsoft Visio画图工具很强,让我们使用,但是我就是用的不习惯。还有没有其他高端的牛逼的,容易上手,一用就爽的画图工具么。针对这么个问题,我其实也是经验不足,Microsoft Visio我也用过,安装包大,还要破解,用的不多,还买个正版,我的脑子还没瓦塌,我是不会买的。那么趁着周末给大家分享两款好用的画图工具,作为程序员还是经常需要画一画图的,你应该能明白我说的画图指的是什么,我也就不过多的强调了。还是强调下吧:1、

    2022年3月1日
    56
  • mysql分析慢查询_开启慢查询日志

    mysql分析慢查询_开启慢查询日志一、生成实验数据原理:sql蠕虫复制(这种生成数据方式同样适用于数据表中有主键的情况)。insertintocomic(name,pen_name,cover)selectname,pen_name,coverfromcomic 二、慢查询日志设置当语句执行时间较长时,通过日志的方式进行记录,这种方式就是慢查询的日志。1、临时开启慢查询日志(如果需要长时间…

    2022年10月14日
    3
  • Mysql的基本函数–与自定义函数

    Mysql的基本函数–与自定义函数什么是Mysql函数:类似于java的方法将一组逻辑语句封装在方法体对外暴露方法名事先提供好的一些功能可以直接使用函数可以用在select语句及其子句上也可以用在update,delete语句当中函数分类:1)字符串函数2)数值函数3)日期和时间函数4)流程函数5)聚合函数6)自定义函数7)其他函数字符串函数:concat(s1,s2…sn…

    2022年7月27日
    4
  • thread继承Runnable吗_不能完全和完全不能的区别

    thread继承Runnable吗_不能完全和完全不能的区别  在实际工作中,我们很可能习惯性地选择Runnable或Thread之一直接使用,根本没在意二者的区别,但在面试中很多自以为是的菜货面试官会经常而且非常严肃的问出:请你解释下Runnable或Thread的区别?尤其是新手就容易上当,不知如何回答,就胡乱编一通。鄙人今天告诉你们这二者本身就没有本质区别,就是接口和类的区别。问出这个问题的面试官本身就是个二流子!如果非要说区别,请看如下:Run…

    2025年8月24日
    3
  • swift uiwebview 用cookie 来实现自动登录

    swift uiwebview 用cookie 来实现自动登录

    2022年3月12日
    39
  • 您的计算机无法访问dota2服务器,提示“已连接至DOTA2游戏协调服务器,正在登陆中”该如何解决?…「建议收藏」

    您的计算机无法访问dota2服务器,提示“已连接至DOTA2游戏协调服务器,正在登陆中”该如何解决?…「建议收藏」《DOTA2》游戏,是一款RPG有些,在国内的玩家有很多,最近有位小伙伴打算在Win10电脑上与朋友一起玩《DOTA2》,却一直提示“已连接至DOTA2游戏协调服务器,正在登陆中”,无法顺利进入该游戏,很是郁闷,所以来问小编该如何解决?今天,小编就带大家一起去了解一下Win10电脑玩《DOTA2》提示“已连接至DOTA2游戏协调服务器,正在登陆中”的解决方案。解决方案一:1、开始按钮在搜索中输入C…

    2022年5月17日
    225

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号