使用tinyxml2库解析xml

前端之家收集整理的这篇文章主要介绍了使用tinyxml2库解析xml前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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(@H_403_117@"persons.xml") != XML_NO_ERROR)
    {
        cout<<@H_403_117@"read file error!"<<endl;
        return -1;
    }
    //获取根节点,即persons节点
    XMLElement* root = doc->RootElement();  
    XMLElement* person = root->FirstChildElement(@H_403_117@"person");  
    while (person)  
    {  
         //获取person的name属性
         const XMLAttribute * nameAttr = person->FirstAttribute();
         String perName = nameAttr->Value();
         if(perName == @H_403_117@"花花")
         {
             cout<<nameAttr->Name()<<@H_403_117@":"<<nameAttr->Value()<<endl;
             //遍历person的其他子节点
             XMLElement * perAttr = person->FirstChildElement();
             while(perAttr)
             {
                 cout<<perAttr->Name()<<@H_403_117@":"<<perAttr->GetText()<<endl;
                 perAttr = perAttr->NextSiblingElement();
             }
         }
         person =  person->NextSiblingElement();
    }  
    delete doc;
    system(@H_403_117@"pause");
}

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

doc->LoadFile(@H_403_117@"persons.xml")

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

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

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

运行效果

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

猜你在找的XML相关文章