使用tinyxml2库解析xml

使用tinyxml2库解析xmltinyxml2简介tinyxml2是c++编写的轻量级的xml解析器,而且是开放源代码的,在一些开源的游戏引擎中用的比较多。源码托管在github上。源码地址:https://github.com/leethomason/tinyxml2tinyxml2使用起来非常简单,下载源码后无需编译成lib文件,直接將tinyxml2.h和tinyxml2.cpp两个文件添加到你自己的工程中即可。

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

tinyxml2简介

tinyxml2是c++编写的轻量级的xml解析器,而且是开放源代码的,在一些开源的游戏引擎中用的比较多。源码托管在github上。
源码地址:https://github.com/leethomason/tinyxml2

这里写图片描述

tinyxml2使用起来非常简单,下载源码后无需编译成lib文件,直接將tinyxml2.h和tinyxml2.cpp两个文件添加到你自己的工程中即可。

tinyxml2使用

我们现在有一个persons.xml文件,里面存放着一些人员信息,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
        <person name="张三">
            <sex></sex>
            <age>30</age>
        </person>
        <person name="花花">
            <sex></sex>
            <age>20</age>
        </person>   
    </persons>

现在我们使用tinyxml2库遍历该xml文件,获取姓名为”花花“的人员的全部信息。

代码如下:

#include "stdafx.h"
#include <string>
#include <iostream>
#include "tinyxml2.h"
#define String std::string
using namespace tinyxml2;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    /* <?xml version="1.0" encoding="UTF-8"?> <persons> <person name="张三"> <sex>男</sex> <age>30</age> </person> <person name="花花"> <sex>女</sex> <age>20</age> </person> </persons> */
    //通过遍历输出姓名为“花花”的个人信息
    XMLDocument* doc = new XMLDocument();  
    if(doc->LoadFile("persons.xml") != XML_NO_ERROR)
    {
        cout<<"read file error!"<<endl;
        return -1;
    }
    //获取根节点,即persons节点
    XMLElement* root = doc->RootElement();  
    XMLElement* person = root->FirstChildElement("person");  
    while (person)  
    {  
         //获取person的name属性
         const XMLAttribute * nameAttr = person->FirstAttribute();
         String perName = nameAttr->Value();
         if(perName == "花花")
         {
             cout<<nameAttr->Name()<<":"<<nameAttr->Value()<<endl;
             //遍历person的其他子节点
             XMLElement * perAttr = person->FirstChildElement();
             while(perAttr)
             {
                 cout<<perAttr->Name()<<":"<<perAttr->GetText()<<endl;
                 perAttr = perAttr->NextSiblingElement();
             }
         }
         person =  person->NextSiblingElement();
    }  
    delete doc;
    system("pause");
}

tinyxml2采用DOM(文档对象模型)方式处理xml文件,xml文件中的每一种元素都有对应的类。

doc->LoadFile("persons.xml")

XMLDocument类的对象代表一份xml文档实例,调用LoadFile方法与xml文件绑定。

XMLElement* root = doc->RootElement();  
XMLElement* person = root->FirstChildElement("person"); 

我们通过XMLDocument类的RootElement获取根节点(xml文件的根节点只有一个),通过root->FirstChildElement(“person”)获取元素名为person的第一个子节点。有了该节点调用XMLElement类NextSiblingElement()方法不断循环遍历即可。

运行效果

这里写图片描述

可以看到我们需要的信息打印了出来。

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

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

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


相关推荐

  • html5人物图片360度立体旋转

    体验效果:http://hovertree.com/texiao/html5/10.htm下载:http://hovertree.com/hvtart/bjae/t16oddyt.htm代码如下:Fu

    2021年12月21日
    46
  • pycharm terminal 进入虚拟环境_pycharm failed to create virtual

    pycharm terminal 进入虚拟环境_pycharm failed to create virtualPycharmterminal激活虚拟环境,首先需要保证系统完成了conda的安装,并在Powershell中完成虚拟环境的创建(操作创建的虚拟环境名称为deep_pool,这个虚拟环境在接下来的操作中会被提及到)。如果不会创建虚拟环境,可以参考下面这个流程:Ubuntu20.4安装Anaconda以及过程中遇到的问题(已解决)_qq_53258482的博客-CSDN博客在虚拟环境创建完成后,在powershell中输入命令Set-ExecutionPolicy-ScopeCurrentUse

    2022年8月25日
    5
  • 高效易用的okio(二)

    高效易用的okio(二)在上篇文章中,我们知道了一些JavaIO的概念,也了解了okio的用法,现在我们来分析一下源码Okio我们回到上篇的代码:Sourcesource=Okio.source(newFile(mPath));Stringread=Okio.buffer(source).readString(Charset.forName("utf-8"));显而易见Okio…

    2022年6月3日
    28
  • java钩子函数(javasocket钩子)

    也不知道我理解的对不对,欢迎大家讨论!自己写了个钩子函数,我理解的钩子函数:publicinterfaceTransactioner{Stringwedontknow();}publicabstractclassGouZi{publicabstractvoidgouzi(Transactione…

    2022年4月13日
    144
  • 详解sigaction「建议收藏」

    详解sigaction「建议收藏」一、内核如何实现信号的捕捉如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下:1.用户程序注册了SIGQUIT信号的处理函数sighandler。2.当前正在执行main函数,这时发生中断或异常切换到内核态。3.在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQU

    2022年5月25日
    46
  • 视频要不要开hdr_hdr在什么情况下使用

    视频要不要开hdr_hdr在什么情况下使用最近两年HDR这个概念可谓是铺天盖地而来,手机也好PC也好电视也好,都拼命往自己头上扣HDR的帽子。而在某些发烧友眼中,如果看片子不带HDR,堪比步兵变骑兵,一下子变得索然无味。然而,新事物往往也伴随着众多新坑,特别是在软硬件环境复杂的PC平台,稍有不慎就会摔得脸青鼻肿,播HDR的效果甚至不如播普通的片子。PC播HDR的大坑有几何?PC并不是专门为视频播放设计的机器,和专业的蓝光机等播放器相比…

    2022年9月14日
    0

发表回复

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

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