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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么保存退出 vim 编辑

    怎么保存退出 vim 编辑保存命令按ESC键跳到命令模式,然后::w保存文件但不退出vim:wfile将修改另外保存到file中,不退出vim:w!强制保存,不推出vim:wq保存文件并退出vim:wq!强制保存文件,并退出vimq:不保存文件,退出vim:q!不保存文件,强制退出vim:e!放弃所有修改,从上次保存文件开始再编辑本文来自ij2155的CSDN博客…

    2022年4月29日
    65
  • 鸢尾花完整的python代码(鸢尾花分类)

    .逻辑回归逻辑回归(LogisticRegression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法。概率p与因变量往往是非线性的,为了解决该类问题,我们引入了logit变换,使得logit(p)与自变量之间存在线性相关的关系,逻辑回归模型定义如下:1#Sigmoid曲线:2importmatplotlib.py…

    2022年4月15日
    331
  • qca wlan wifi modules解析三

    qca wlan wifi modules解析三WLAN驱动的内核模块。参看下面这个框图:WLAN驱动中各个内核模块的作用如下:asf.ko–基本框架模块qdf.ko–基本框架模块ath_spectral.ko–支持Spectralath_dfs.ko–支持DFSumac.ko–通用802.11协议管理ath_hal.ko–Direct-Attach硬件虚拟层ath_rate_atheros.ko–…

    2022年7月11日
    15
  • python列表添加元素的方法_列表添加元素的三种方法

    python列表添加元素的方法_列表添加元素的三种方法欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗Ctrl+B斜体Ctrl+I引用Ctrl

    2022年10月23日
    0
  • 疫后本地生活踏入拐点,全面升级的饿了么助力身边经济

    疫后本地生活踏入拐点,全面升级的饿了么助力身边经济7月10日饿了么宣布全面升级,从餐饮外卖平台转变为解决用户身边一切即时需求的生活服务平台,并将在未来大力布局“身边经济”,打造应有尽有的生活圈。眼下,整个经济正在迎来疫情后的反弹复苏,以餐饮、生鲜、零售为代表的消费行业加速反弹,饿了么在此时宣布全面升级,可谓顺势而为,在笔者看来,此次全面升级,有两大看点。在后疫情时代,饿了么从餐饮外卖平台转型同城生活服务,也将对整个本地生活服务会产生深刻的影响。看点1:饿了么为什么在此时宣布全面升级?在零售的战场上,时机和火候往往决定一切。饿了么此次..

    2022年6月22日
    49
  • excel宏 java,Microsoft Excel宏运行Java程序

    excel宏 java,Microsoft Excel宏运行Java程序IhavelearnttoreadandwriteanExcelfileusingaJavaprogramwiththehelpofJxlandPOIAPI.IsitpossibletorunaJavaprogramwiththehelpofmacros?解决方案Yes,itispossible.Therearequit…

    2022年6月3日
    34

发表回复

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

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