C++ XML库用法详解

 更新时间:2025年03月26日 11:02:05   作者:少年丶趁年轻  
TinyXML-2是C++中一个轻量级、易于使用的XML解析库,支持XML的读取和写入,内存占用小,适合嵌入式系统,本文给大家介绍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;
}

到此这篇关于C++ XML库用法详解的文章就介绍到这了,更多相关c++ XML库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++ std::initializer_list 实现原理解析及遇到问题

    C++ std::initializer_list 实现原理解析及遇到问题

    这篇文章主要介绍了C++ std::initializer_list 实现原理勘误,本文通过源码解析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • C++抽奖程序实现方法

    C++抽奖程序实现方法

    这篇文章主要介绍了C++抽奖程序实现方法,实例分析了C++随机数的生成技巧与抽奖程序的实现方法,需要的朋友可以参考下
    2015-07-07
  • C语言字符函数与字符串函数详解

    C语言字符函数与字符串函数详解

    这篇文章主要给大家介绍了关于C语言字符/字符串的相关函数,文中通过示例代码总结的非常详细,对大家学习或者使用C语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-09-09
  • C#中委托的基本用法总结

    C#中委托的基本用法总结

    以下是对C#中委托的基本用法进行了详细的总结分析,需要的朋友可以过来参考下。希望对大家有所帮助
    2013-09-09
  • 一文详解C++中的转换构造函数

    一文详解C++中的转换构造函数

    在 C/C++ 中,不同的数据类型之间可以相互转换,无需用户指明如何转换的称为自动类型转换(隐式类型转换),需要用户显式地指明如何转换的称为强制类型转换,本文就给大家详细介绍一下C++的转换构造函数,需要的朋友可以参考下
    2023-09-09
  • 距离详解Linux下的UDP方式通讯

    距离详解Linux下的UDP方式通讯

    这篇文章主要介绍了距离详解Linux下的UDP方式通讯,是深入Linux系统编程中的基础,需要的朋友可以参考下
    2015-10-10
  • 基于C中含有if的宏定义详解

    基于C中含有if的宏定义详解

    本篇文章是对C中含有if的宏定义进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++基于随机数实现福彩双色球的方法示例

    C++基于随机数实现福彩双色球的方法示例

    这篇文章主要介绍了C++基于随机数实现福彩双色球的方法,结合完整实例形式分析了C++随机数算法的实现与使用技巧,需要的朋友可以参考下
    2017-06-06
  • c语言中数组名a和&a详细介绍

    c语言中数组名a和&a详细介绍

    其实这两个东西挺难理解的,应该也没有那么重要,了解一下好了,主要还是要多多理解数组指针的运算
    2013-08-08
  • C++ 如何将string转换成全小写

    C++ 如何将string转换成全小写

    这篇文章主要介绍了C++ 如何将string转换成全小写问题,具有很好的参考价值,希望对大家有所帮助。
    2022-11-11

最新评论