基本概念
TinyXML-2 是一个轻量级、跨平台的 C++ XML 解析库,适合快速读写小型 XML 文件,无需复杂依赖。
核心方法
方法类别 | 典型方法 |
---|---|
文档操作 | LoadFile() /SaveFile() |
根节点获取 | RootElement() |
子节点定位 | FirstChildElement("名") |
同级遍历 | NextSiblingElement() |
属性安全读 | QueryIntAttribute() (int/double等) |
属性快速读 | Attribute("id") 返回字符串类型 |
属性精确写 | SetDoubleAttribute("error", 0.02) |
属性快速写 | SetAttribute("id", "M003") |
节点树构建 | LinkEndChild() |
文本内容获取 | GetText() |
使用示例
示例1:XML文件读取与遍历查询
#include "tinyxml.h"
#include <iostream>
void ReadXMLDemo() {
// 加载XML文档
TiXmlDocument doc("data.xml");
if (!doc.LoadFile()) {
std::cerr << "加载失败: " << doc.ErrorDesc() << std::endl;
return;
}
// 获取根节点
TiXmlElement* root = doc.RootElement();
if (!root) {
std::cerr << "空文档" << std::endl;
return;
}
// 遍历子节点
TiXmlElement* item = root->FirstChildElement("Item");
while (item) {
// 读取属性值
int id = 0;
if (item->QueryIntAttribute("id", &id) == TIXML_SUCCESS) {
std::cout << "Item ID: " << id << std::endl;
}
// 处理下一个同级节点
item = item->NextSiblingElement("Item");
}
}
示例2:创建新XML文件
void CreateXMLDemo() {
TiXmlDocument doc;
// 添加XML声明
TiXmlDeclaration* decl = new TiXmlDeclaration("1.0", "UTF-8", "");
doc.LinkEndChild(decl);
// 创建根节点
TiXmlElement* root = new TiXmlElement("Data");
doc.LinkEndChild(root);
// 添加带属性的子节点
TiXmlElement* entry = new TiXmlElement("Entry");
entry->SetIntAttribute("type", 1); // 整型属性
entry->SetAttribute("category", "tech");// 字符串属性
root->LinkEndChild(entry);
// 保存文件
if (!doc.SaveFile("new_data.xml")) {
std::cerr << "保存失败" << std::endl;
}
}
/* 生成文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Entry type="1" category="tech"/>
</Data>
*/
总结
TinyXML-2 是一个轻量级、跨平台的 C++ XML 解析库,适合处理小型 XML 文件。它提供了丰富的 API,方便进行节点操作、属性读写等操作,无需复杂依赖,易于集成到项目中。
附上速查表:
对象 | 核心职责 | 典型操作 |
---|---|---|
XMLDocument | 文档容器,管理IO与内存 | LoadFile() SaveFile() RootElement() |
XMLElement | 处理XML标签与属性 | FirstChildElement() SetAttribute() QueryIntAttribute() |
XMLNode | 节点基类,支持树形遍历 | Parent() NextSibling() DeleteChildren() |
XMLAttribute | 封装属性键值对 | Name() Value() NextAttribute() |
XMLText | 存储文本内容 | SetValue() GetText() |
XMLDeclaration | 处理XML头部声明(版本/编码) | Parse()(自动创建) |