tinyxml库使用实例

读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

TinyXM下载地址

使用TinyXML只需要将其中的6个文件拷贝到项目中就可以直接使用了,这六个文件是:tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp

TinyXML包括如下类:

TiXmlDocument:XML文档类,它一般用于指示一个文档对象;
TiXmlDeclaration:XML标识类,也就是XML文件第一行中标注的相关信息;
TiXmlElement:XML节点类,这个类用来表示一个节点;
TiXmlText:XML节点类的文本信息类,标注了XML节点类的文本信息;
TiXmlComment:XML的注释信息类,用来标识XML文档类的注释信息;

继承关系如下:
在这里插入图片描述

以如下Students.xml为例进行数据读取:

<Students>
    <Student Name="James" Age = "10">
        <Class>1</Class>
        <Grade>2</Grade>
    </Student>
	<Student Name="Jane" Age = "11">
        <Class>2</Class>
        <Grade>3</Grade>
    </Student>
</Students>

读取代码:

#include <iostream>
#include "tinyxml.h"

#define CheckNullReturnMinusOne(t) if (nullptr == t) { return -1; }

int main()
{
    
    
	const char* path = "Students.xml";
	TiXmlDocument doc(path);

	if (!doc.LoadFile())
	{
    
    
		std::cout << "Load File Failed" << std::endl;
		return -1;
	}

	TiXmlElement* pRoot = doc.RootElement(); CheckNullReturnMinusOne(pRoot);
	for (TiXmlElement* pStudent = pRoot->FirstChildElement(); pStudent != nullptr; pStudent = pStudent->NextSiblingElement())
	{
    
    
		std::cout << "---------------------------------\n";

		// 遍历获取Student节点的所有属性
		for (TiXmlAttribute* pAttribute = pStudent->FirstAttribute(); pAttribute != nullptr; pAttribute = pAttribute->Next())
		{
    
    
			std::cout << pAttribute->Name() << " : " << pAttribute->Value() << std::endl;
		}

		// 获取Student节点的子节点
		for (TiXmlElement* pData = pStudent->FirstChildElement(); pData != nullptr; pData = pData->NextSiblingElement())
		{
    
    
			std::cout << pData->Value() << " : " << pData->GetText() << std::endl;
		}

		std::cout << "----------------------------------\n";
	}
		
	return 0;
}

程序运行输出为:

---------------------------------
Name : James
Age : 10
Class : 1
Grade : 2
----------------------------------
---------------------------------
Name : Jane
Age : 11
Class : 2
Grade : 3
----------------------------------

猜你喜欢

转载自blog.csdn.net/xp178171640/article/details/106212008