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++之返回类型用法及return语句介绍

    C++之返回类型用法及return语句介绍

    这篇文章主要介绍了C++之返回类型用法及return语句,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-06-06
  • C语言之如何用isspace()和ungetc()实现前导空白字符过滤

    C语言之如何用isspace()和ungetc()实现前导空白字符过滤

    这篇文章主要介绍了C语言如何用isspace()和ungetc()实现前导空白字符过滤问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • 使用Matlab绘制七夕咕呱小青蛙

    使用Matlab绘制七夕咕呱小青蛙

    七夕节到了还不快给你的朋友安排上这只咕呱小青蛙?本文将用Matlab绘制一个可爱的咕呱小青蛙,感兴趣的小伙伴可以动手尝试一下
    2022-08-08
  • Microsoft Visual C++ 安装失败 0x80070666的问题解决

    Microsoft Visual C++ 安装失败 0x80070666的问题解

    本文主要介绍了Microsoft Visual C++ 安装失败 0x80070666的问题解决,错误可能由已安装其他VisualC++版本、VisualC++安装异常、Windows更新计划安装同一VisualC++包等原因引起,下面就来介绍一下解决方案,感兴趣的可以了解一下
    2025-03-03
  • C语言进阶教程之预处理

    C语言进阶教程之预处理

    C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等,下面这篇文章主要给大家介绍了关于C语言进阶教程之预处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • 详解C语言中sizeof如何在自定义函数中正常工作

    详解C语言中sizeof如何在自定义函数中正常工作

    在main函数中,sizeof是可以正常工作的,但是在自定义函数中就不可以了。所以本文将为大家详细讲解一下如何解决这一问题,感兴趣的可以了解一下
    2022-05-05
  • C++多态的实现及原理详细解析

    C++多态的实现及原理详细解析

    C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数
    2013-09-09
  • C++实现学生信息管理系统

    C++实现学生信息管理系统

    这篇文章主要为大家详细介绍了C++实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系

    Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系

    这篇文章主要介绍了Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系,本文用代码和注释讲解了Cocos2d-x中的坐标体系,需要的朋友可以参考下
    2014-09-09
  • C++中双冒号::的作用浅析

    C++中双冒号::的作用浅析

    在C++中经常使用双冒号::,很多朋友不知道是什么意思,这篇文章主要介绍了C++中双冒号::的作用,需要的朋友可以参考下
    2018-06-06

最新评论