当前位置: 首页 > news >正文

【QT文件操作】---xml文件读取

XML(可扩展标记语言,eXtensible Markup Language)是一种用于存储和传输数据的文本格式,广泛用于配置文件、数据交换和文档表示。XML 文件具有明确的结构和标记,这使得它能够描述复杂的层次结构和数据关系。

xml和html的区别?

  1. xml标签和属性可自定义,html标签和属性固定不可自定义
  2. xml注重在数据的本身作为数据承载一个标签的定义就是为了承载一个数据,HTML注重的是数据的显示方式,一个标签的使用是为了页面的结构化和需求

XML 文件的基本结构

  1. 声明(可选)
    XML 文件通常以一个 XML 声明开始,指示 XML 版本和字符编码:
<?xml version="1.0" encoding="UTF-8"?>
  1. 根元素
    XML 文件必须有一个唯一的根元素,所有其他元素都包含在这个根元素中:
<root><!-- 子元素 -->
</root>
  1. 元素
    元素是 XML 的基本组成部分,每个元素都有一个开始标签和一个结束标签,标签之间的内容为元素的内容:
<element>内容</element>
  1. 属性
    元素可以有属性,属性提供了额外的信息,并位于开始标签中:
<element attribute="value">内容</element>
  1. 嵌套元素
    元素可以嵌套其他元素,形成层次结构:
<parent><child>内容</child>
</parent>
  1. 注释
    注释可以添加到 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&#xff08;可扩展标记语言&#xff0c;eXtensible Markup Language&#xff09;是一种用于存储和传输数据的文本格式&#xff0c;广泛用于配置文件、数据交换和文档表示。XML 文件具有明确的结构和标记&#xff0c;这使得它能够描述复杂的层次结构和数据关系。 xml和html…...

科研软件 | Diamond 4.6 安装教程

软件介绍 Diamond一个化学专业软件。它是一款在原子水平实现晶体结构可视化的软件&#xff0c;包括分子和聚合物扩展、多面体、搜索结构数据、自动和批量创建结构图片等功能&#xff0c;支持晶体结构着色和渲染以及批注。 软件下载 https://pan.quark.cn/s/37214b5bec7c 软…...

利用keepalived达成服务高可用

官方网站Keepalived for Linux 1.keepalived简介 vrrp 协议的软件实现&#xff0c;原生设计目的为了 高可用 ipvs 服务 功能&#xff1a; 基于 vrrp 协议完成地址流动 为 vip 地址所在的节点生成 ipvs 规则 ( 在配置文件中预先定义 ) 为 ipvs 集群的各 RS 做健康状态检测 …...

Dumpy:一款针对LSASS数据的动态内存取证工具

关于Dumpy Dumpy是一款针对LSASS数据的动态内存取证工具&#xff0c;该工具专为红队和蓝队研究人员设计&#xff0c;支持重新使用打开的句柄来动态转储 LSASS。 运行机制 Dumpy可以动态调用 MiniDumpWriteDump 来转储 lsass 内存内容。此过程无需打开 lsass 的新进程句柄&…...

TinyEngine是什么?

TinyEngine 是 OpenTiny 项目下的一个开源低代码引擎&#xff0c;旨在帮助开发者快速构建应用程序。它提供了可视化搭建页面的能力&#xff0c;支持在线实时构建和二次开发或集成&#xff0c;适用于多种场景的低代码平台开发&#xff0c;例如资源编排、服务端渲染、模型驱动、移…...

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]做数据同步&#xff0c;建立生产库的测试库&#xff0c;需要DBA配合同步前后的停库和起库。在同步完起库后&#xff0c;有部门反应同步好的测试库连接不上去。 2. 问题排查 以我当前的知识储备&#xff0c;能想到的可能就是以下几点进…...

Vmware虚拟机接入物理机路由器网络

网络适配器增加至两个&#xff0c;一个选NAT, 另一个选host-only,再加一个桥接&#xff0c;不勾选使用物理网卡&#xff0c;然后重启即可&#xff01;...

yolov8旋转框+关键点检测

一、Yolov8obb_kpt -----------------------------------现已在v8官方库上更新旋转框分割算法和旋转框关键点检测算法-------------------------- ------------------------------------------- https://github.com/yzqxy/ultralytics-obb_segment---------------------------…...

Qt-QWidget的windowTitle属性(13)

目录 描述 相关API 使用观察 描述 这个我们之前用过很多次了&#xff0c;就不再赘述了&#xff0c;简单说就是可以给那个边框设置标题&#xff0c;但是这里有一个小细节需要我们注意&#xff0c;就是谁的窗口谁设置 相关API 使用观察 我们这样写的话会发现一个问题&#x…...

RCE编码绕过--php://filter妙用

目录 代码 如何绕过 payload构造 代码 <?php $content <?php exit; ?>; $content . $_POST[txt]; file_put_contents($_POST[filename],$content); 当你想要输入代码的时候前面会有<?php exit;?>;&#xff0c;代码没有办法执行下去&#xff0c;所以…...

FactoryBean 与 BeanFactory

首先从字面理解: FactoryBean -->工厂Bean&#xff1b; BeanFactory -->Bean工厂。 即&#xff1a; FacttoryBean 是一个bean&#xff0c; BeanFactory 是bean的工厂。 使用&#xff1a; 1、BeanFactory&#xff1a; 提供获取bean的API。 2、FactoryBean&#xff1a; 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的启动代码&#xff1a; SessionFactoryImpl 的初始化里做了非常多的事情&#xff0c;初始化各种资源&#xff0c;并调用 SchemaManagementToolCoordinat…...

TOMCAT入门到精通

目录 一 WEB技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表 1.2.3 JavaScript 二 WEB框架 2.2后台应用架构 2.2.1单体架构 2.2.2微服务 2.2.3单体架构和微服务比较 三 tomcat的…...

Android笔试面试题AI答之Kotlin(18)

文章目录 86. 阐述Kotlin中性能优化之局部函数 &#xff1f;局部函数的优点间接的性能优化注意事项 87. 简述Kotlin中性能优化之数组使用 &#xff1f;1. 选择合适的数组类型2. 避免不必要的数组创建3. 优化数组访问4. 合理使用数组遍历方式5. 利用Kotlin的集合操作API6. 注意数…...

Linux基础知识学习(五)

1. 用户组管理 每个用户都有一个用户组&#xff0c;系统可以对一个用户组中的所有用户进行集中管理&#xff08;开发、测试、运维、root&#xff09;。不同Linux 系统对用户组的规定有所不同&#xff0c;如Linux下的用户属于与它同名的用户组&#xff0c;这个用户组在创建用户…...

股票买卖的思路与代码

题目 1302&#xff1a;股票买卖 时间限制: 1000 ms 内存限制: 65536 KB 提交数:8660 通过数: 4290 【题目描述】 最近越来越多的人都投身股市&#xff0c;阿福也有点心动了。谨记着“股市有风险&#xff0c;入市需谨慎”&#xff0c;阿福决定先来研究一下简化版的股…...

Eureka Server与Eureka Client详解:服务注册与发现的交互机制

Eureka Server与Eureka Client详解&#xff1a;服务注册与发现的交互机制 Eureka 是 Netflix 开源的一个服务发现框架&#xff0c;它是 Spring Cloud 微服务架构中的核心组件之一。Eureka 主要由两个关键组件构成&#xff1a;Eureka Server 和 Eureka Client。它们之间通过一定…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...