TinyXML 是輕量級開源 C++ XML 解析庫,支援 Windows/Linux,將 XML 文件解析為內存 DOM 樹,提供直觀 API 遍歷操作。核心類:
TiXmlDocument:文檔根節點TiXmlElement:元素節點(可巢狀、含屬性)TiXmlAttribute:屬性TiXmlText:文本內容TiXmlDeclaration:XML 聲明TiXmlComment:註釋tinystr.h/cpp, tinyxml.h/cpp, tinyxmlerror.cpp, tinyxmlparser.cpp。#include "tinyxml.h";編譯時需編譯所有 .cpp。LinkEndChild(decl);
// 根元素
TiXmlElement* root = new TiXmlElement("Info");
root->SetAttribute("num", 3);
doc->LinkEndChild(root);
// 子元素循環
for (int i = 0; i < 3; ++i) {
TiXmlElement* stu = new TiXmlElement("Stu");
stu->SetAttribute("class", i==2 ? "B" : "A");
stu->SetAttribute("id", i+1);
stu->SetAttribute("flag", (i+1)*10);
root->LinkEndChild(stu);
// 子節點:姓名、分數、城市
auto addChild = [&](const char* name, const char* text) {
TiXmlElement* e = new TiXmlElement(name);
e->LinkEndChild(new TiXmlText(text));
stu->LinkEndChild(e);
};
addChild("Name", "Mike");
addChild("Score", "88");
addChild("City", "Shenzhen");
}
doc->SaveFile("stu_info.xml");
delete doc;
return 1;
}
Value() << endl;
for (TiXmlElement* stu = root->FirstChildElement(); stu; stu = stu->NextSiblingElement()) {
cout << stu->Value() << " ";
for (TiXmlAttribute* attr = stu->FirstAttribute(); attr; attr = attr->Next())
cout << attr->Name() << "=" << attr->Value() << " ";
cout << endl;
for (TiXmlElement* child = stu->FirstChildElement(); child; child = child->NextSiblingElement())
cout << " " << child->Value() << ": " << child->FirstChild()->Value() << endl;
}
return 1;
}
Mike 88 Shenzhen ... ...
.cpp,否則鏈接錯誤。LinkEndChild 所有權轉移給父節點,不可重複掛載同一節點,也不可手動刪除已掛載節點。