讀取和設置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
----------------------------------