【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。它们之间通过一定…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.
这个警告表明您在使用Vue的esm-bundler构建版本时,未明确定义编译时特性标志。以下是详细解释和解决方案: 问题原因: 该标志是Vue 3.4引入的编译时特性标志,用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...
qt 双缓冲案例对比
双缓冲 1.双缓冲原理 单缓冲:在paintEvent中直接绘制到屏幕,绘制过程被用户看到 双缓冲:先在redrawBuffer绘制到缓冲区,然后一次性显示完整结果 代码结构 单缓冲:所有绘制逻辑在paintEvent中 双缓冲:绘制…...
Ansible+Zabbix-agent2快速实现对多主机监控
ansible Ansible 是一款开源的自动化工具,用于配置管理(Configuration Management)、应用部署(Application Deployment)、任务自动化(Task Automation)和编排(Orchestration…...

Unity VR/MR开发-开发环境准备
视频讲解链接: 【XR马斯维】UnityVR/MR开发环境准备【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...