简单轻量的 C++ XML 解析库 TinyXML-2

基本概念

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()(自动创建)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值