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