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

QT中QDomDocument读写XML文件

一、XML文件

<?xml version="1.0" encoding="UTF-8"?>
<Begin><Type name="zhangsan"><sex>boy</sex><school>Chengdu</school><age>18</age><special>handsome</special></Type><Type name="lisi"><sex>boy</sex><school>Xian</school><age>19</age><special>ugly</special></Type>
</Begin>

<?xml version="1.0" encoding="UTF-8"?>版本说明与编号

“Begin”根节点,可以理解为一级目录

”TypeX“是子节点,可以理解为二级目录;”name“是属性,”zhangsan“是属性值

“sex”“school”等是三级节点,可以理解为三级目录;”girl“”“Xian”等是文本;

二、QT中的QDomDocument类

使用时需要添加xml模块。

qt帮助手册简单例子

三、实际代码操作读写操作

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QFile>
#include <QDomDocument>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;private:void my_xml_read();void my_xml_write();
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//xml读写my_xml_read();my_xml_write();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::my_xml_read()
{QDomDocument doc("info");QFile file(":/info.xml");if (!file.open(QIODevice::ReadOnly))return;if (!doc.setContent(&file))//将文件与DomDocument关联{file.close();return;}file.close();QDomElement firstElem = doc.documentElement();//获取到了<begin>一级目录qDebug()<<"一级目录<begin>: "<<firstElem.nodeName();QDomNodeList secondList = firstElem.childNodes();//获取全部二级目录<Type1><Type2><Typ3>for (int i = 0; i < secondList.count(); ++i) {QString str = QString("      第 %1 个二级目录节点:").arg(i+1);qDebug()<<str.toUtf8().data()<<secondList.at(i).nodeName();//将QString转换成char *,使用qDebug输出没有引号QDomElement secondElem = secondList.at(i).toElement();//获取二级目录节点的属性值管理者domElementif(secondElem.hasAttribute("name")){//输出二级目录节点的属性值qDebug()<<"      "<<secondElem.nodeName().append("的属性值name为").toUtf8().data()<<secondElem.attribute("name");}else{qDebug()<<"      "<<secondElem.nodeName().append("该节点无属性值").toUtf8().data();}QDomNodeList thirdList = secondList.at(i).childNodes();//获取三级目录<具体值></具体值>for(int j = 0;j<thirdList.length();j++ ){QDomElement thirdElement=thirdList.at(j).toElement();QString str_1 = QString("            %1中第 %2 个三级目录节点 %3,他的文本值为 %4:").arg(secondList.at(i).nodeName(),QString::number(j+1),thirdList.at(j).nodeName(),thirdElement.text());qDebug()<<str_1.toUtf8().data();//将QString转换成char *,使用qDebug输出没有引号}}
}void MainWindow::my_xml_write()
{//add instructionQDomDocument doc;QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");//写xml中的第一行说明doc.appendChild(instruction);//add 第一级目录节点QDomElement firstNode = doc.createElement("Begin");doc.appendChild(firstNode);//add 第二级目录节点QDomElement secondNode = doc.createElement("Type");//为二级目录添加属性值QDomAttr secondAttr = doc.createAttribute("MyLover");secondAttr.setValue("lr");secondNode.setAttributeNode(secondAttr);firstNode.appendChild(secondNode);//一级目录下添加二级节点//add 第三级目录节点 添加text文本值QDomElement thirdNode_1 = doc.createElement("sex");secondNode.appendChild(thirdNode_1);QDomText t1 = doc.createTextNode("girl");thirdNode_1.appendChild(t1);QDomElement thirdNode_2 = doc.createElement("school");secondNode.appendChild(thirdNode_2);QDomText t2 = doc.createTextNode("Chengdu");thirdNode_2.appendChild(t2);QDomElement thirdNode_3 = doc.createElement("age");secondNode.appendChild(thirdNode_3);QDomText t3 = doc.createTextNode("28");thirdNode_3.appendChild(t3);QDomElement thirdNode_4 = doc.createElement("special");secondNode.appendChild(thirdNode_4);QDomText t4 = doc.createTextNode("beautiful");thirdNode_4.appendChild(t4);QString fileName = QFileDialog::getSaveFileName(this,"Save xml file","../my_xml","xml(*.xml)");if(fileName.isEmpty()){return;}QFile myFile(fileName);bool ret =myFile.open(QIODevice::WriteOnly|QIODevice::Text);if(!ret){QMessageBox::warning(this,"warning","保存文件失败!");return;}QTextStream stream(&myFile);//使用QTextStream类与文件关联进行保存xml!stream.setCodec("UTF-8");//编码格式doc.save(stream,4);//4代表的是缩进个数myFile.close();QMessageBox::information(this,"save tip","xml文件保存成功!");
}

四、项目运行

与写操作写的信息一致

相关文章:

QT中QDomDocument读写XML文件

一、XML文件 <?xml version"1.0" encoding"UTF-8"?> <Begin><Type name"zhangsan"><sex>boy</sex><school>Chengdu</school><age>18</age><special>handsome</special>&l…...

sql盲注

文章目录 布尔盲注时间盲注 布尔盲注 介绍&#xff1a;在网页只给你两种回显的时候是用&#xff0c;类似于布尔类型的数据&#xff0c;1表示正确&#xff0c;0表示错误。 特点&#xff1a;思路简单&#xff0c;步骤繁琐且麻烦。 核心函数&#xff1a; length()函数substr()函…...

星网安全产品线成立 引领卫星互联网解决方案创新

2024年6月12日&#xff0c;盛邦安全&#xff08;688651&#xff09;成立星网安全产品线&#xff0c;这是公司宣布全面进入以场景化安全、网络空间地图和卫星互联网安全三大核心能力驱动的战略2.0时代业务落地的重要举措。 卫星互联网技术的快速发展&#xff0c;正将其塑造为全球…...

Adam自适应动量优化算法

Adam&#xff08;Adaptive Moment Estimation&#xff09;是一种结合了动量法和自适应学习率思想的优化算法&#xff0c;特别适用于训练神经网络和深度学习模型。以下是对Adam调整学习率的详细介绍及具体例子。 一、Adam调整学习率介绍 自适应学习率&#xff1a; Adam算法的核…...

Mac OS系统中Beyond Compare 4破解方式

文章出处 https://blog.csdn.net/qq_42418042/article/details/137544113 前言 记录实操过程&#xff0c;以防以后找不到了~ 实际原理是启动时删除文件&#xff0c;实现无限试用 实操过程 下载安装包 官网链接 https://www.scootersoftware.com/download.php 解压、移动到应…...

6000元最好的家用投影仪:当贝X5S Pro六千元配置最高画质最强

数码家电品牌发展迅速&#xff0c;投影同样也是一种更新迭代较快的产品类型&#xff0c;有时候去年还比较火的产品&#xff0c;今年就会被别的产品取代&#xff0c;就比如之前灯泡投影一直被认为是好产品的代表&#xff0c;但是现在国产激光投影的销量反而更高。一般来说6000元…...

#### golang中【堆】的使用及底层 ####

声明&#xff0c;本文部分内容摘自&#xff1a; Go: 深入理解堆实现及应用-腾讯云开发者社区-腾讯云 数组实现堆 | WXue 堆&#xff08;Heap&#xff09;是实现优先队列的数据结构&#xff0c;Go提供了接口和方法来操作堆。 应用 package mainimport ("container/heap&q…...

OpenAI Gym Atari on Windows

题意&#xff1a;在Windows系统上使用OpenAI Gym的Atari环境 问题背景&#xff1a; Im having issues installing OpenAI Gym Atari environment on Windows 10. I have successfully installed and used OpenAI Gym already on the same system. It keeps tripping up when t…...

Java进阶----接口interface

接口 接口概述 接口是一种规范&#xff0c;使用接口就代表着要在程序中制定规范. 制定规范可以给不同类型的事物定义功能&#xff0c;例如&#xff1a; 利用接口&#xff0c;给飞机、小鸟制定飞行规范&#xff0c;让其都具备飞行的功能&#xff1b;利用接口&#xff0c;给鼠…...

【网络协议】ISIS

ISIS IS-IS&#xff08;Intermediate System to Intermediate System&#xff0c;中间系统到中间系统&#xff09;协议是一种用于在自治系统&#xff08;AS&#xff09;内部进行路由选择的链路状态路由协议。它最初是为OSI&#xff08;开放系统互连&#xff09;网络设计的&…...

一.4 处理器读并解释储存在内存中的指令

此刻&#xff0c;hello.c源程序已经被编译系统翻译成了可执行目标文件hello&#xff0c;并被存放在硬盘上。要想在Unix系统上运行该可执行文件&#xff0c;我们将它的文件名输入到称为shell的应用程序中&#xff1a; linux>./hello hello, world linux> shell是一个命令…...

【Android面试八股文】Android性能优化面试题:怎样检测函数执行是否卡顿?

文章目录 卡顿一、可重现的卡顿二、不可重现的卡顿第一种方案: 基于 Looper 的监控方法第二种方案:基于 Choreographer 的监控方法第三种方案:字节码插桩方式第四种方案: 使用 JVMTI 监听函数进入与退出总结相关大厂的方案ArgusAPMBlockCanaryQQ空间卡慢组件Matrix微信广研参…...

C语言7 控制语句

目录 1. 条件语句 if 语句 if-else 语句 if-else if-else 语句 switch 语句 2. 循环语句 for 循环 while 循环 do-while 循环 3. 跳转语句 break 语句 continue 语句 return 语句 goto 语句 1. 条件语句 if 语句 if语句根据给定条件的真或假来决定是否执行某段…...

go mod 依赖管理补充2

依赖包的版本问题&#xff0c;别的开发语言有没有类似的问题&#xff1f;是怎么解决的&#xff1f; 举例&#xff1a;java java的依赖包的版本问题&#xff0c;通过Maven模块来操作&#xff0c;可以指定依赖包版本号&#xff0c;如下&#xff1a; go.mod 文件 go.mod文件是G…...

【Git】取消追踪多个文件或目录

文章目录 场景方法1. 添加到 .gitignore2. 从暂存区移除 示例1. 编辑 .gitignore 文件2. 从暂存区移除文件或目录 场景 清理&#xff1a;不再希望某些文件被 Git 追踪。配置忽略文件&#xff1a;通常配合 .gitignore 文件使用&#xff0c;以便以后这些文件不会被重新添加到索引…...

【Linux详解】进程等待 | 非阻塞轮询

引入&#xff1a; 为什么&#xff1f;是什么&#xff1f;怎么办 是什么&#xff1f; 进程等待是指父进程暂停自己的执行&#xff0c;直到某个特定的子进程结束或发生某些特定的事件。 为什么&#xff1f; 僵尸进程刀枪不入&#xff0c;不可被杀死&#xff0c;存在内存泄露…...

聊一下Maven打包的问题(jar要发布)

文章目录 一、问题和现象二、解决方法&#xff08;1&#xff09;方法一、maven-jar-pluginmaven-dependency-plugin&#xff08;2&#xff09;方法二、maven-assembly-plugin 一、问题和现象 现在的开发一直都是用spring boot&#xff0c;突然有一天&#xff0c;要自己开发一个…...

JavaScript中,正则表达式所涉及的api,解析、实例和总结

JS中正则的api包括以下&#xff1a; String#searchString#splitString#matchString#replaceRegExp#testRegExp#exec 1. String#search 查找输入串中第一个匹配正则的index&#xff0c;如果没有匹配的则返回-1。g修饰符对结果无影响 var string "abbbcbc"; var r…...

【计算机】同步/异步

同步/异步 在计算机科学和编程中&#xff0c;“同步”&#xff08;Synchronization&#xff09;是一种机制&#xff0c;用于协调不同进程或线程之间的操作&#xff0c;以避免竞态条件&#xff08;race conditions&#xff09;、死锁&#xff08;deadlocks&#xff09;和其他并…...

谈大语言模型动态思维流程编排

尽管大语言模型已经呈现出了强大的威力&#xff0c;但是如何让它完美地完成一个大的问题&#xff0c;仍然是一个巨大的挑战。 需要精心地给予大模型许多的提示&#xff08;Prompt&#xff09;。对于一个复杂的应用场景&#xff0c;编写一套完整的&#xff0c;准确无误的提示&am…...

工厂自动化相关设备工业一体机起到什么作用?

在当今的制造业领域&#xff0c;工厂自动化已成为提高生产效率、保证产品质量和降低成本的关键。在这一进程中&#xff0c;工业一体机作为一种重要的设备&#xff0c;发挥着不可或缺的作用。 工业一体机是自动化生产线上的控制中心。它能够整合和处理来自各个传感器、执行器和其…...

哈佛大学 || 概念空间中学习动态的涌现:探索隐藏能力

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读 今天主要看一个问题&#xff1a;在模型中的学习动态是如何涌现的。 在现代生成模型的研究与应用中&#xff0c;不断发现这些模型在处理训练数据时展现出了惊人的能力&#xff0c;这些能力很…...

Dockerfile打包部署常用操作

文章目录 1、Dockerfile部署java程序&#xff08;jar包&#xff09;1.1、创建Dockerfile1.2、将Dockerfile和要上传的jar包放到一个目录下&#xff0c;构建镜像1.3、创建启动容器 2、Dockerfile部署vue2.1、创建dockerfile文件2.2、将打包的dist文件放到dockerfile同文件目录下…...

ArcGIS:探索地理信息系统的强大功能与实际应用

ArcGIS是一款功能强大的地理信息系统&#xff08;GIS&#xff09;软件&#xff0c;由Esri公司开发。它广泛应用于各个领域&#xff0c;包括城市规划、环境保护、资源管理、交通运输等。作为一名长期使用ArcGIS的用户&#xff0c;我深感这款软件在数据分析、地图制作和空间信息管…...

Python 全栈体系【三阶】(二)

第一章 Django 五、模板 1. 概述 Django中的模板是指可以动态生成任何基于文本格式文件的技术&#xff08;如HTML、CSS等&#xff09;。 Django中内置了自己的模板系统&#xff0c;称为DTL(Django Template Language), Django模板语言。 2. 配置 settings.py中关于模板的…...

【VUE】 深入理解 Vue 动态路由:简介、实际开发场景与代码示例

深入理解 Vue 动态路由&#xff1a;简介、实际开发场景与代码示例 Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它拥有丰富的生态系统&#xff0c;其中 Vue Router 是其官方的路由管理库。动态路由是 Vue Router 的一个强大特性&#xff0c;允许我们在应用运行时根…...

Linux x86_64平台指令替换函数 text_poke_smp/bp

文章目录 前言一、text_poke_early1.1 text_poke_early简介1.2 用途 二、text_poke_smp2.1 简介2.1.1 text_poke_smp函数2.2.2 stop_machine_text_poke简介2.2.3 text_poke函数 2.2 用途 三、text_poke_smp 内核hook 前言 Linux x86_64平台指令替换函数有两种类型&#xff1a;…...

海南云亿商务咨询有限公司口碑怎么样?

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以前所未有的速度发展。抖音作为短视频领域的佼佼者&#xff0c;其电商功能更是为众多品牌和企业打开了全新的销售渠道。海南云亿商务咨询有限公司&#xff0c;作为抖音电商服务领域的佼佼者&#xff0c;正以其专业的服务和创…...

航空数据管控系统-②项目分析与设计:任务2:使用Git或SVN管理项目(可选任务,只介绍Git安装)

任务描述 1、安装Git 2、注册GitHub 3、配置本地库 4、配置远程库 5、使用Git管理项目 任务指导 分为以下几个部分完成&#xff1a; 学会Git的安装&#xff0c;帐号注册本地存储库的管理自己创建一个项目&#xff0c;项目名称为自己的名字&#xff0c;上传到代码仓库&#xff…...

【面试题】串联探针和旁挂探针有什么区别?

在网络安全领域中&#xff0c;串联探针和旁挂探针&#xff08;通常也被称为旁路探针&#xff09;是两种不同部署方式的监控设备&#xff0c;它们各自具有独特的特性和应用场景。以下是它们之间的主要区别&#xff1a; 部署方式 串联探针&#xff1a;串联探针一般通过网关或者…...