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


相关推荐

  • ajax出现”parsererror”错误

    ajax出现”parsererror”错误1.后台控制器方法上加了@ResponseBody注解,但AJAX未加dataType:“JSON”2.后台控制器方法的返回值与指定的返回值类型不同

    2022年6月20日
    35
  • Interp1 c++实现

    Interp1 c++实现在网上找了一下,有是有但是我下载下来用的时候结果不对。想修改一下但是搞得迷迷糊糊的,就干脆写了一个,不过只有最简单的线性插值的实现,新手可以直接拿过去用。也希望老鸟也可以不吝赐教,提高一下效率或者优化下结构。cpp文件//—————————————————————————#pragmahdrstop#include”Interpfun.h”//————————

    2022年5月2日
    40
  • 服务器网络io性能_服务器热备份方案

    服务器网络io性能_服务器热备份方案介质(HDD/SSD)接口sata/scsicontroller,raid卡or南桥,是否有缓存文件系统xfs,或其他brtfs之类的磁盘队列算法deadlinecfqnoopdm内存缓存设置RAID形式性能RAID0磁盘空间使用率:100%,故成本最低。读性能:N单块磁盘的读性能。写性能:N单块磁盘的写性能。冗余:无,任何一块磁盘损坏都将导致数据不可用…

    2022年9月20日
    1
  • Java static变量保存在哪?

    Java static变量保存在哪?java-versionjavaversion&amp;amp;amp;amp;quot;1.8.0_171&amp;amp;amp;amp;quot;Java(TM)SERuntimeEnvironment(build1.8.0_171-b11)JavaHotSpot(TM)64-BitServerVM(build25.171-b11,mixedmode)//java-XX:+UseSerialGC-XX:-UseCompre…

    2022年7月16日
    18
  • 网页设计实现留言板_有关留言板界面的设计

    网页设计实现留言板_有关留言板界面的设计web网页设计期末大作业_留言板制作.doc本科学生综合性实验报告姓名___李朝彭__学号_______1341004242___学院________信息学院_专业软件工程班级_13F_课程名称《Web应用开发技术》实验名称综合性作品设计—留言板_指导教师_______白磊_______________开课学期2014至2…

    2025年6月25日
    2
  • 【转】Jdom入门知识

    【转】Jdom入门知识

    2021年7月28日
    67

发表回复

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

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