当前位置: 首页 > news >正文

c++ XML库用法

在C++中,处理XML文件的读写操作可以通过多种库来实现。以下是几个常用且简洁的库:

1. ​TinyXML-2

  • 简介: TinyXML-2 是一个轻量级的C++ XML解析库,易于使用且性能良好。
  • 特点:
    • 简单易用,API直观。
    • 内存占用小,适合嵌入式系统。
    • 支持XML文件的读取和写入。
  • 安装: 只需包含头文件和源文件即可。

TinyXML-2 和 ​pugixml 是最常用的XML处理库,适合大多数场景。

#include "xml_lib/tinyxml2.h"
#include <iostream>

using namespace tinyxml2;

int main() {
    // 创建 XML 文档对象
    XMLDocument doc;

    // 读取 XML 文件
    if (doc.LoadFile("demo.xml") != XML_SUCCESS) {
        std::cerr << "Failed to load XML file!" << std::endl;
        return 1;
    }

    // 获取根节点
    XMLElement* root = doc.FirstChildElement("RegisterDescription");
    if (!root) {
        std::cerr << "No root element found!" << std::endl;
        return 1;
    }

    // 读取子节点内容
    // XMLElement* element = root->FirstChildElement("Name=public_system_status");
    // if (element) {
    //     XMLElement* element2 = element->FirstChildElement("DisplayName");
    //     std::cout << "Element2 text: " << element2->GetText() << std::endl;
    // }

    /* 遍历节点信息 */
    for (XMLElement* child = root->FirstChildElement(); child != nullptr; child = child->NextSiblingElement()) {
        // 检查节点名称是否为 "Integer"
        if (strcmp(child->Name(), "Integer") == 0) {
            // 检查属性 "Name" 和 "NameSpace" 是否符合条件
            const char* name = child->Attribute("Name");
            const char* nameSpace = child->Attribute("NameSpace");
            if (name && nameSpace && strcmp(name, "public_reserved_0x0008") == 0 && strcmp(nameSpace, "Custom") == 0) {
                // 找到目标节点
                //std::cout << "Found target node: " << child->Name() << std::endl;
                std::cout << "Found target node: " << child->FirstChildElement("pValue")->GetText() << std::endl;

                // 获取节点的文本内容(如果有)
                const char* text = child->GetText();
                if (text) {
                    std::cout << "Node text: " << text << std::endl;
                }

                // 可以在这里处理目标节点
                break; // 找到后退出循环
            }
        }
    }

    // 修改或添加新节点
    XMLElement* newElement = doc.NewElement("newElement");
    newElement->SetText("LiuMing");
    root->InsertEndChild(newElement);

    // 保存修改后的 XML 文件
    if (doc.SaveFile("gigevdevice.xml") != XML_SUCCESS) {
        std::cerr << "Failed to save XML file!" << std::endl;
        return 1;
    }

    std::cout << "XML file updated successfully!" << std::endl;
    return 0;
}

相关文章:

  • 【机器学习-模型评估】
  • 【人工智能】如何理解transformer中的token?
  • 以高斯(GaussDB) 为例, 在cmd 命令行连接数据,操作数据库,关闭数据库的详细步骤
  • Jenkins 容器化部署 uniapp H5 项目
  • 完整的类在JVM中的生命周期详解
  • 腾讯云HAI1元体验:轻松调用DeepSeek-R1模型搭建网站
  • FRP在远程办公中的实战应用
  • 国家雪亮工程政策护航,互联网监控管理平台铸就安全防线
  • Android Compose 图像修饰深度解析(八)
  • 支持多系统多协议且可提速的下载工具
  • 【ES】Elasticsearch学习
  • 《深度学习》——YOLOv3详解
  • HarmonyOS Next~鸿蒙系统安全:构建全方位的防护体系
  • 威联通 加载swoole记录
  • MySQL 索引下推
  • Debian开启大字体
  • 【数据结构】栈(Stack)、队列(Queue)、双端队列(Deque) —— 有码有图有真相
  • 【C++语言】继承和多态常见的面试问题
  • mysql-大批量插入数据的三种方式和使用场景
  • 期刊分区表2025年名单下载(经济学、管理学)
  • 南方降水频繁暴雨连连,北方高温再起或现40°C酷热天气
  • 4月企业新发放贷款利率处于历史低位
  • 日本航空自卫队一架练习机在爱知县坠毁
  • 中国海警舰艇编队5月14日在我钓鱼岛领海巡航
  • 专访|导演刘江:给谍战题材注入现实主义的魂
  • 第四届长三角国际应急博览会开幕,超3000件前沿装备技术亮相