当前位置: 代码网 > it编程>编程语言>C/C++ > C++ XML库用法详解

C++ XML库用法详解

2025年03月26日 C/C++ 我要评论
在c++中,处理xml文件的读写操作可以通过多种库来实现。以下是几个常用且简洁的库:1. ​tinyxml-2​简介: tinyxml-2 是一个轻量级的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库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com