在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库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论