素材巴巴 > 程序开发 >

Xml解析 --TinyXML-2

程序开发 2023-09-08 18:45:05

TinyXML-2 是小巧、精简且高效的C++ XML 解析库,可以被方便地应用到其他项目中。

github: https://github.com/leethomason/tinyxml2

简而言之,tinyxml-2是一个xml解析器,从xml文档构建一个可以读取、修改和保存的文档对象模型(dom)。

有多种方法可以访问XML数据并与之交互。TinyXML-2使用的是文档对象模型(DOM),这意味着XML数据被解析为可以浏览和操作的C++对象,然后写入磁盘或另一个输出流。还可以从头开始用C++对象构造XML文档,并将其写入磁盘或其他输出流。甚至可以使用tinyxml-2以编程方式从代码中流式处理xml,而无需先创建文档。

 

测试文件


 113506681856123@126.com
 

使用方法
将tinyxml2.cpp和tinyxml2.h拷贝至项目目录,使用时包含
#include “tinyxml2.h”
using namespace tinyxml2;

测试代码

void test_xml()
 {const char* openPath   = "settings/xml/test.xml";const char* changePath = "settings/xml/change.xml";XMLDocument doc;if (doc.LoadFile( openPath ) != 0){cout<<"load xml file failed!"<FirstChildElement( "User" );if(userNode == NULL || userNode == 0){cout<<"userNode is NULL!"<Attribute( "Name" );const char* pass = userNode->Attribute( "Password" );cout<<"Name:"<FirstChildElement("Gender");XMLElement* mobileNode = userNode->FirstChildElement("Mobile");
 XMLElement* emailNode = userNode->FirstChildElement("Email");
 //API:IntText(),UnsignedText(),Int64Text(),DoubleText(),BoolText() and FloatText() are suportedint gen = genderNode->IntText();const char* mobile = mobileNode->GetText();const char* email = emailNode->GetText();cout<<"Gender:"<FirstChildElement( "zoo_cute" );if(zooNode == NULL || zooNode == 0){cout<<"zooNode is NULL!"<FirstChildElement("item"); item; item = item->NextSiblingElement("item")){const char* id   = item->Attribute( "id" );const char* name = item->Attribute( "name" );int down_limit   = atoi(item->Attribute( "down_limit" ));int up_limit     = atoi(item->Attribute( "up_limit" ));cout<<"id:"<SetAttribute("up_limit", 2 * up_limit );doc.SaveFile(changePath);}}

代码中读取xml两种常见的配置方式下的各个属性值进行展示,后面修改了zoo_cute节点下item子节点的up_limit属性值,并将修改后的xml内容保存到另个一个文件中。

执行结果:

修改后保存的xml内容如下:

 


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。