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


相关推荐

  • 原型模式的应用场景_原型化开发方法

    原型模式的应用场景_原型化开发方法ProtoType 原型模式动机模型定义实例结构要点总结笔记动机在软件系统中,经常面临着”某些结构复杂的对象“的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口如何应对这种变化?如何向”客户程序“(使用这些对象的程序)”隔离出“这些易变对象,从而使得”依赖这些易变对象的客户程序“不随着需求变化而变化?模型定义使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新对象。实例和工厂模型用的同一个实例工厂模式//工厂class SplitterF

    2022年8月9日
    5
  • 深度了解 JavaScript 中 三目运算符

    深度了解 JavaScript 中 三目运算符深度了解JavaSCript中三目运算符初次写文章留作纪念三目运算符的写法及体征通过一个简单的案例,让你更深层的了解判断类型的三目运算符的应用分为单条件和多条件两种类型。单条件语法多条件语法布尔表达式?表达式true执行:表达式false执行布尔表达式1?表达式1true执行:(布尔表达式2?表达式2的true执行:两个表达…

    2022年6月25日
    29
  • ReLU激活函数:简单之美

    ReLU激活函数:简单之美导语在深度神经网络中,通常使用一种叫修正线性单元(Rectifiedlinearunit,ReLU)作为神经元的激活函数。

    2022年6月15日
    27
  • java对象转json字符串方法_oracle clob转字符串

    java对象转json字符串方法_oracle clob转字符串曾今遇到一个问题,需要将JavaBean转换为Json字符串,用fastjson可以很方便的做到。但是得到的结果是JavaBean成员变量的首字母编程了小写。经过查找资料,原来我们可以使用fastjson的@JsonField注解来自定义json中key的值,这样看来还是很方便的。

    2022年9月22日
    3
  • dumpbin用法

    dumpbin用法转自:http://www.cnblogs.com/lidabo/p/3482dumpbin用法:dumpbin/exports/out:d:\mfc90.txtd:\mfc90.lib在使用VC时,可以用DUMPBIN.EXE来得到某个DLL中所输出的符号的清单。如下面的命令:dumpbin-exportsCmpnt1.dll如:C:\WINDOWS\syste…

    2022年6月19日
    33
  • python创建学生管理系统_学员管理系统 培训机构

    python创建学生管理系统_学员管理系统 培训机构使用面向对象完成了学员管理系统,实现了添加、删除、修改、查询、保存读取等功能。将学员、学员管理后台、开始入口分为了3个py文件,分别是Student.py、Student_management.py、main.py。保存文件名叫student.txt文件。内含注释,我也是给初学者,可能有些地方解释不清楚。Student.py代码如下#定义学生的类classStudent(object):def__init__(self,name,gender,number):

    2025年12月7日
    5

发表回复

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

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