使用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)
上一篇 2022年5月5日 下午3:20
下一篇 2022年5月5日 下午3:20


相关推荐

  • 超详细LinkedHashMap解析

    超详细LinkedHashMap解析文章目录 LinkedHashMa 概述 LinkedHashMa 原理主要元素构造函数维护链表的操作 afterNodeRem 操作 put 操作 HashMap putVal Remove 操作 HashMap removeNode LinkedHashMa 用作实现 LRU 总结 LinkedHashMa 概述 pub

    2026年3月19日
    2
  • keras TensorFlow_tensorflow 安装

    keras TensorFlow_tensorflow 安装keras里面tensorflow版ResNet101源码分析”””Adaptedfromhttps://gist.github.com/flyyufelix/65018873f8cb2bbe95f429c474aa1294改编自flyyufelix注意:keras支持的Tensorflow—-UsingTensorFlowbackend(需要修改相应的配置文件)ker…

    2026年4月14日
    45
  • paping && psping 那些事

    paping && psping 那些事paping amp psping 简单描述 paping 跨平台 psping 只能在 windows 上进行使用 ping 跨平台当需要测试数据包能否通过 IP 协议到达特定主机 一般都是使用 ping 工作时 ping 向目标主机发送一个 ICMPEcho 请求的数据包 并等待接收 Echo 相应数据包 通过响应时间和成功响应的次数来判断丢包率和网络延迟 担当对方禁止 ICMP 之后 ping 将无效 所

    2025年9月2日
    5
  • 遍历hashmap的三种方式_hashmap循环遍历

    遍历hashmap的三种方式_hashmap循环遍历privateHashMapchannels=newHashMap<>();privatevoidselectPayChannle(Stringpaychannel){for(Map.Entryentry:channels.entrySet()){payChannel=paychannel;Ra

    2025年8月5日
    7
  • vue.js 时间戳转换日期格式

    vue.js 时间戳转换日期格式时间戳可以理解为过滤器的一种方式 日期格式的转换在项目中也经常遇到 今天我来总结项目中踩过的坑 以及解决方法 时间戳转换日期格式有三种方法 方式一运行 cmd 执行 npminstallmo 或者 yarnaddmomen 命令 安装 moment 插件在 main js 文件中引入 moment 插件 并定义全局过滤器 3 在后续组件中 如果需要转换时

    2026年3月26日
    2
  • TLB简介

    TLB简介映射机制的本质 是一个程序能够判断出其使用的某个地址是否在自己的地址空间 并且迅速找出相对应的物理地址 简单来说就是 VADD PADD 的过程 但是 mips 中 TLB 不命中填充的过程不是由硬件来完成的 因此需要软件来做 也就是当发现一个无法译码的地址的时候 就触发一个 TLB 重装异常 然后由程序作剩下的事情 由此可以看出 其实转换得过程就是一个输入键值 VADD 和一个输

    2026年3月18日
    2

发表回复

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

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