【QT文件操作】---xml文件读取
XML(可扩展标记语言,eXtensible Markup Language)是一种用于存储和传输数据的文本格式,广泛用于配置文件、数据交换和文档表示。XML 文件具有明确的结构和标记,这使得它能够描述复杂的层次结构和数据关系。
xml和html的区别?
- xml标签和属性可自定义,html标签和属性固定不可自定义
- xml注重在数据的本身作为数据承载一个标签的定义就是为了承载一个数据,HTML注重的是数据的显示方式,一个标签的使用是为了页面的结构化和需求
XML 文件的基本结构
- 声明(可选)
XML 文件通常以一个 XML 声明开始,指示 XML 版本和字符编码:
<?xml version="1.0" encoding="UTF-8"?>
- 根元素
XML 文件必须有一个唯一的根元素,所有其他元素都包含在这个根元素中:
<root><!-- 子元素 -->
</root>
- 元素
元素是 XML 的基本组成部分,每个元素都有一个开始标签和一个结束标签,标签之间的内容为元素的内容:
<element>内容</element>
- 属性
元素可以有属性,属性提供了额外的信息,并位于开始标签中:
<element attribute="value">内容</element>
- 嵌套元素
元素可以嵌套其他元素,形成层次结构:
<parent><child>内容</child>
</parent>
- 注释
注释可以添加到 XML 文件中,以提供额外的信息或说明,但不会影响 XML 的处理:
<!-- 这是一个注释 -->
QT设置xml常用类
处理XML的主要类是QDomDocument、QDomElement、QDomNode、QXmlStreamReader和QXmlStreamWriter。这些类分别用于读取、写入、解析和操作XML文档。
1. QDomDocument
用途: 用于处理和操作整个 XML 文档的 DOM(文档对象模型)结构。
QDomDocument 以树形结构读取、修改和创建 XML 文档。
主要功能:
- 解析 XML 文档字符串或文件,生成一个 DOM 树。
- 提供访问和操作 XML 文档节点的方法。
- 支持创建新节点、修改现有节点以及保存 XML 文档到文件。
示例代码:
QDomDocument doc;
QFile file("example.xml");
if (file.open(QIODevice::ReadOnly) && doc.setContent(&file)) {// 处理 XML 文档
}
2. QDomElement
用途: 代表 XML 文档中的一个元素节点。它是 DOM 树中节点的一个具体类型,用于访问和操作元素的属性和文本内容。
主要功能:
- 获取和设置元素的属性。
- 获取元素的子元素、文本内容等。
- 通过 QDomElement 对象可以修改 XML 元素的内容和属性。
示例代码:
QDomElement element = doc.documentElement(); // 获取根元素
QString value = element.attribute("attributeName"); // 获取属性值
3. QDomNode
用途: 代表 XML 文档中的一个节点。QDomNode 是一个通用的节点类,可以表示元素节点、属性节点、文本节点等。
主要功能:
- 提供节点的类型、父节点、子节点等通用操作。
- 通过 QDomNode 可以访问不同类型的节点,但要将其转换为具体类型(如 QDomElement、QDomText)才能进一步操作。
示例代码:
QDomNode node = doc.firstChild();
if (node.isElement()) {QDomElement element = node.toElement();
}
4. QXmlStreamReader
用途: 用于逐步读取 XML 数据,适用于处理大规模的 XML 数据,因为它以流式方式解析 XML 文件,不需要将整个文件加载到内存中。
主要功能:
- 按顺序读取 XML 文档中的节点。
- 适用于从头到尾逐个处理 XML 数据流,节省内存。
- 只提供读取操作,不支持修改 XML 数据。
示例代码:
QXmlStreamReader reader(&file);
while (!reader.atEnd()) {if (reader.readNext() == QXmlStreamReader::StartElement) {QStringRef name = reader.name();// 处理元素}
}
5. QXmlStreamWriter
用途: 用于逐步写入 XML 数据,适用于生成或修改 XML 文件。与 QXmlStreamReader 配合使用可以有效地处理 XML 数据流。
主要功能:
- 提供逐步写入 XML 元素、属性、文本等功能。
- 可以逐个构建 XML 文档,适用于内存受限或需要动态生成 XML 文件的场景。
示例代码:
QXmlStreamWriter writer(&file);
writer.setAutoFormatting(true);
writer.writeStartDocument();
writer.writeStartElement("root");
writer.writeTextElement("child", "value");
writer.writeEndElement();
writer.writeEndDocument();
使用QDomDocument进行XML读写
读取数据:
#include <QDomDocument>
#include <QFile>
#include <QTextStream>bool readXml(const QString &fileName) {QFile file(fileName);if (!file.open(QIODevice::ReadOnly)) {qWarning("Failed to open file for reading");return false;}QDomDocument doc;if (!doc.setContent(&file)) {file.close();qWarning("Failed to parse XML");return false;}file.close();//返回根节点QDomElement root = doc.documentElement();//返回 root 元素下所有名称为 "item" 的子元素QDomNodeList items = root.elementsByTagName("item");//遍历 items 中的所有元素for (int i = 0; i < items.count(); ++i) {QDomElement element = items.at(i).toElement();QString name = element.attribute("name"); //从 element 中获取名为 "name" 的属性值QString value = element.text();qDebug() << "Item:" << name << value;}return true;
}
写入数据:
#include <QDomDocument>
#include <QFile>
#include <QTextStream>bool writeXml(const QString &fileName) {QDomDocument doc;//文档对象创建一个标签QDomElement root = doc.createElement("root");doc.appendChild(root);QDomElement item = doc.createElement("item");//为标签添加属性item.setAttribute("name", "example");item.appendChild(doc.createTextNode("This is an example item"));//为root添加子标签root.appendChild(item);QFile file(fileName);if (!file.open(QIODevice::WriteOnly)) {qWarning("Failed to open file for writing");return false;}//保存文件QTextStream stream(&file);stream << doc.toString();file.close();return true;
}相关文章:
【QT文件操作】---xml文件读取
XML(可扩展标记语言,eXtensible Markup Language)是一种用于存储和传输数据的文本格式,广泛用于配置文件、数据交换和文档表示。XML 文件具有明确的结构和标记,这使得它能够描述复杂的层次结构和数据关系。 xml和html…...
科研软件 | Diamond 4.6 安装教程
软件介绍 Diamond一个化学专业软件。它是一款在原子水平实现晶体结构可视化的软件,包括分子和聚合物扩展、多面体、搜索结构数据、自动和批量创建结构图片等功能,支持晶体结构着色和渲染以及批注。 软件下载 https://pan.quark.cn/s/37214b5bec7c 软…...
利用keepalived达成服务高可用
官方网站Keepalived for Linux 1.keepalived简介 vrrp 协议的软件实现,原生设计目的为了 高可用 ipvs 服务 功能: 基于 vrrp 协议完成地址流动 为 vip 地址所在的节点生成 ipvs 规则 ( 在配置文件中预先定义 ) 为 ipvs 集群的各 RS 做健康状态检测 …...
Dumpy:一款针对LSASS数据的动态内存取证工具
关于Dumpy Dumpy是一款针对LSASS数据的动态内存取证工具,该工具专为红队和蓝队研究人员设计,支持重新使用打开的句柄来动态转储 LSASS。 运行机制 Dumpy可以动态调用 MiniDumpWriteDump 来转储 lsass 内存内容。此过程无需打开 lsass 的新进程句柄&…...
TinyEngine是什么?
TinyEngine 是 OpenTiny 项目下的一个开源低代码引擎,旨在帮助开发者快速构建应用程序。它提供了可视化搭建页面的能力,支持在线实时构建和二次开发或集成,适用于多种场景的低代码平台开发,例如资源编排、服务端渲染、模型驱动、移…...
FPGA跨时钟域处理
文章目录 一、为什么要做跨时钟域处理二、单bit信号从慢时钟到快时钟处理2.1 使用同步寄存器链(打两拍)2.2 仿真代码编写2.3 仿真结果观察 三、单bit信号从快时钟域到慢时钟域处理3.1 使用脉冲展宽3.2 仿真代码编写3.3 仿真结果观察 四、在任意时钟域跨单bit信号4.1 使用握手协…...
【Docker深入浅出】Docker镜像
文章目录 一. Docker镜像简介二. Docker镜像详解1. 镜像和容器的关系2. 镜像通常比较小3. 拉取镜像4. 镜像命名4.1. 镜像仓库服务4.2. 官方和非官方镜像仓库4.3. 镜像的命名和标签 5. 为镜像打多个标签6. 过滤镜像内容6.1. 虚空镜像6.2. 删除虚空镜像6.3. 过滤器与格式化输出 7…...
“LOCAL_LISTENER”参数导致业务无法连接数据库,文末附Oracle连接故障检查监听的排查流程
1. 背景及问题 今天在Oracle BCV技术[1]做数据同步,建立生产库的测试库,需要DBA配合同步前后的停库和起库。在同步完起库后,有部门反应同步好的测试库连接不上去。 2. 问题排查 以我当前的知识储备,能想到的可能就是以下几点进…...
Vmware虚拟机接入物理机路由器网络
网络适配器增加至两个,一个选NAT, 另一个选host-only,再加一个桥接,不勾选使用物理网卡,然后重启即可!...
yolov8旋转框+关键点检测
一、Yolov8obb_kpt -----------------------------------现已在v8官方库上更新旋转框分割算法和旋转框关键点检测算法-------------------------- ------------------------------------------- https://github.com/yzqxy/ultralytics-obb_segment---------------------------…...
Qt-QWidget的windowTitle属性(13)
目录 描述 相关API 使用观察 描述 这个我们之前用过很多次了,就不再赘述了,简单说就是可以给那个边框设置标题,但是这里有一个小细节需要我们注意,就是谁的窗口谁设置 相关API 使用观察 我们这样写的话会发现一个问题&#x…...
RCE编码绕过--php://filter妙用
目录 代码 如何绕过 payload构造 代码 <?php $content <?php exit; ?>; $content . $_POST[txt]; file_put_contents($_POST[filename],$content); 当你想要输入代码的时候前面会有<?php exit;?>;,代码没有办法执行下去,所以…...
FactoryBean 与 BeanFactory
首先从字面理解: FactoryBean -->工厂Bean; BeanFactory -->Bean工厂。 即: FacttoryBean 是一个bean, BeanFactory 是bean的工厂。 使用: 1、BeanFactory: 提供获取bean的API。 2、FactoryBean: p…...
【迅为RK3568开发板】OpenHarmony学习开发系列教程(第2期 南向基础篇一)
P1P1_搭建Ubuntu开发环境-8:23 P2P2_获取OpenHarmony源码-10:21 P3P3_初次编译OpenHarmony源码-7:11 P4P4_OpenHarmony镜像简介以及烧写工具配置-9:18 P5P5_优化开发流程-搭建windows开发环境-5:34 P6P6_优化开发流程-搭建ubuntu开发环境-2:09 P7P7_优化开发流程-配置远程访问环…...
编程修炼之Hibernate--- springboot启动初始化ddl过程与如何自定义修改 table 字段长度
文章目录 springboot启动初始化ddl过程如何自定义修改 table springboot启动初始化ddl过程 跟踪Springboot整合hibernate的启动代码: SessionFactoryImpl 的初始化里做了非常多的事情,初始化各种资源,并调用 SchemaManagementToolCoordinat…...
TOMCAT入门到精通
目录 一 WEB技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS(Cascading Style Sheets)层叠样式表 1.2.3 JavaScript 二 WEB框架 2.2后台应用架构 2.2.1单体架构 2.2.2微服务 2.2.3单体架构和微服务比较 三 tomcat的…...
Android笔试面试题AI答之Kotlin(18)
文章目录 86. 阐述Kotlin中性能优化之局部函数 ?局部函数的优点间接的性能优化注意事项 87. 简述Kotlin中性能优化之数组使用 ?1. 选择合适的数组类型2. 避免不必要的数组创建3. 优化数组访问4. 合理使用数组遍历方式5. 利用Kotlin的集合操作API6. 注意数…...
Linux基础知识学习(五)
1. 用户组管理 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发、测试、运维、root)。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户…...
股票买卖的思路与代码
题目 1302:股票买卖 时间限制: 1000 ms 内存限制: 65536 KB 提交数:8660 通过数: 4290 【题目描述】 最近越来越多的人都投身股市,阿福也有点心动了。谨记着“股市有风险,入市需谨慎”,阿福决定先来研究一下简化版的股…...
Eureka Server与Eureka Client详解:服务注册与发现的交互机制
Eureka Server与Eureka Client详解:服务注册与发现的交互机制 Eureka 是 Netflix 开源的一个服务发现框架,它是 Spring Cloud 微服务架构中的核心组件之一。Eureka 主要由两个关键组件构成:Eureka Server 和 Eureka Client。它们之间通过一定…...
PyCharm实战:从零到一完成YOLOv11自定义数据集训练
1. 环境准备与数据集配置 第一次用PyCharm跑YOLOv11训练时,我对着满屏的代码和配置文件差点放弃。后来发现只要环境装对了,后面都是顺水推舟。这里分享几个新手容易踩的坑:CUDA版本和PyTorch不匹配会导致显卡根本用不上,conda环境…...
终极AI图像增强神器Upscayl:让每一张照片重获新生
终极AI图像增强神器Upscayl:让每一张照片重获新生 【免费下载链接】upscayl 🆙 Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy. 项目地址: https://gitcode.com/GitHub_Trending…...
OFA图像语义蕴含模型效果展示:漫画分镜图+剧情假设的叙事逻辑连贯性验证
OFA图像语义蕴含模型效果展示:漫画分镜图剧情假设的叙事逻辑连贯性验证 1. 引言:当漫画遇上AI逻辑验证 你有没有过这样的经历?看漫画时突然发现前后剧情对不上,或者某个分镜的画面和对话明显矛盾?这种叙事逻辑的不连…...
别再为XCode证书头疼了!Unity打包iOS App的保姆级避坑指南(含iOSDeviceSupport下载)
Unity打包iOS应用终极避坑手册:从Xcode证书到真机调试全链路解决方案 每次看到Unity打包iOS时Xcode弹出的红色错误提示,是不是感觉血压瞬间飙升?作为经历过上百次打包踩坑的老司机,我决定把那些官方文档从不提及的"隐藏关卡&…...
ms-swift框架实战:从零构建高效Embedding微调流水线
1. 为什么需要定制Embedding模型? 在智能客服问答匹配这类场景中,预训练的通用Embedding模型往往表现不佳。我去年做过一个电商客服项目,直接用开源Embedding模型处理"怎么退货"这类问题时,会把"如何退款"、&…...
别再把FastAPI路由和挂载搞混了!一张图讲清`mount`与子应用的应用场景
FastAPI路由与挂载深度解析:如何为模块化开发选择最佳方案 在构建现代Web应用时,模块化设计已成为提升可维护性和团队协作效率的关键策略。FastAPI作为Python生态中最受欢迎的异步框架之一,提供了两种截然不同的模块化方案:APIRo…...
Ozon买家纠纷如何高效解决?借CaptainAI轻松化解!
做Ozon跨境电商,卖家最头疼的是买家纠纷,如买家质疑商品与描述不符、物流延迟投诉、退货商品状态分歧等。Ozon平台有纠纷处理时限,买家不满解决方案可在5个日历日内发起纠纷,平台3天审核裁决,卖家准备不足、响应不及时…...
用ESP32和Arduino打造你的专属F1蓝牙方向盘(附完整3D打印文件)
用ESP32和Arduino打造你的专属F1蓝牙方向盘(附完整3D打印文件) 模拟赛车爱好者们对沉浸式体验的追求从未停止,而一款高度定制化的F1风格方向盘往往是提升操控感的关键。本文将带你从零开始,利用ESP32开发板和Arduino生态ÿ…...
快马AI一键生成链表可视化原型,交互演示助力算法设计
最近在复习数据结构时,发现链表这种基础但重要的结构,光看静态图示很难理解指针变化。正好尝试用InsCode(快马)平台快速搭建了一个可视化演示工具,整个过程比想象中简单很多,分享下实现思路: 需求拆解 首先明确需要实现…...
STM32实战(五)卡尔曼滤波在ADC噪声抑制中的参数优化与效果对比
1. 卡尔曼滤波在ADC噪声抑制中的核心价值 第一次用STM32的ADC采集传感器数据时,我被跳动的数值惊呆了——温度读数上下浮动2℃,红外测距值波动超过10%。这种噪声不仅影响数据可信度,更会导致控制逻辑误判。后来接触到卡尔曼滤波,…...
