Qt XML文件解析 QDomDocument

QtXml模块提供了一个读写XML文件的流,解析方法包含DOM和SAX,两者的区别是什么呢?

DOM(Document Object Model):将XML文件保存为树的形式,操作简单,便于访问。

SAX(Simple API for XML):接近于底层,速度较快,但不便于访问。

如果要使用XML时,.pro文件中添加:

QT += xml

 使用时添加文件头:

#include <QDomDocument>

QXmlStreamReader和QXmlStreamWriter不在模块QtXml中,而是在QtCore中,该模块只涉及DOM和SAX基于XML的接口。

解析方法:
void ParseXML::parse(QString file_name)  
{  if(file_name.isEmpty())  return;  QFile file(file_name);  if(!file.open(QFile::ReadOnly | QFile::Text)){  QMessageBox::information(NULL, QString("title"), QString("open error!"));return;  }  QDomDocument document;  QString error;  int row = 0, column = 0;  if(!document.setContent(&file, false, &error, &row, &column)){  QMessageBox::information(NULL, QString("title"), QString("parse file failed at line row and column") + QString::number(row, 10) + QString(",") + QString::number(column, 10));return;  }  if(document.isNull()){  QMessageBox::information(NULL, QString("title"), QString("document is null!"));return;  }  QDomElement root = document.documentElement();  //root_tag_name为personsQString root_tag_name = root.tagName();if(root.hasAttribute("name")){//name为QtQString name = root.attributeNode("name").value(); }//获取id="1"的节点QDomElement person = root.firstChildElement();  if(person.isNull()) return; QString person_tag_name = person.tagName();//id为1QString id = person.attributeNode("id").value();//获取子节点,数目为2QDomNodeList list = root.childNodes();int count = list.count();for(int i=0; i{QDomNode dom_node = list.item(i);QDomElement element = dom_node.toElement();//获取id值,等价QString id_1 = element.attributeNode("id").value(); QString id_2 = element.attribute("id");//获取子节点,数目为4,包括:name、age、email、websiteQDomNodeList child_list = element.childNodes();int child_count = child_list.count();for(int j=0; j{QDomNode child_dom_node = child_list.item(j);QDomElement child_element = child_dom_node.toElement();QString child_tag_name = child_element.tagName();QString child__tag_value = child_element.text();}}//按照name、age、email、website的顺序获取值QDomElement element = person.firstChildElement();  while(!element.isNull()){  QString tag_name = element.tagName();QString tag_value = element.text();element = element.nextSiblingElement();  }  
}  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/107787.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

渗透测试工具ZAP入门教程(1)-安装和快速开始

介绍 ZAP Zed Attack Proxy&#xff08;ZAP&#xff09;是一个免费的开源渗透测试工具&#xff0c;在 软件安全项目 &#xff08;SSP&#xff09;。ZAP 专为测试 Web 应用程序而设计&#xff0c;既灵活又可扩展。 ZAP的核心是所谓的“中间人代理”。它位于测试人员的浏览器和…

go学习-指针 标识符

指针&#xff0c;以及标识符 1.指针 &#xff08;1&#xff09;.基本介绍 1&#xff09;基本数据类型&#xff0c;变量存的值&#xff0c;也叫值类型 2&#xff09;获取变量的地址用&&#xff0c;比如 var num int ,获取num的地址&#xff1a;&num 3)指针类型&…

Yolo系列-yolov2

YOLO-V2 更快&#xff01;更强&#xff01; YOLO-V2-BatchNormalization BatchNormalization&#xff08;批归一化&#xff09;是一个常用的深度神经网络优化技术&#xff0c;它可以将输入数据进行归一化处理&#xff0c;使得神经网络更容易进行学习。在YOLOv2中&#xff0c;B…

promise

promise 属于事件循环的微任务&#xff0c;具体详见&#xff1a;事件循环 Promise 语法: const p1 new Promise((reslove,reject)>{console.log(2);reslove(1) }).then((data)>{console.log(3);console.log(data) }).catch((data)>{console.log(3); }) promise.th…

基于Milvus Cloud的相似穿搭推荐系统教程——图像分割

作为一个大众眼中的“非典型程序员”,我喜欢拥抱时尚和潮流,比如我经常在演讲时穿粉色裤子,这甚至已经成为一个标志性打扮。某天又逢主题演讲日,我站在衣柜前挑选上衣的时候,忽然灵光乍现:有没有可能借助 Milvus Cloud找到和我穿搭风格最为相似的明星呢? 这个想法在我脑…

Oracle给表空间添加容量

假如给SYSTEM表空间添加 查看文件位置和容量&#xff1a;Select * FROM DBA_DATA_FILES; FILE_NAME就是要修改的文件 查看每一个表空间的容量&#xff0c;单位MB&#xff1a; SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tablespaces…

部分调试记录

Ubuntu16.04纯命令行安装VMwareTools hudahuahudahua-virtual-machine:~$ sudo apt-get install open-vm-tools -yhudahuahudahua-virtual-machine:~$ sudo apt-get install open-vm-tools-desktop无法加载so文件&#xff0c;版本问题 [rootdragonboard /]# ./Qserial -qws .…

sql server删除历史数据

1 函数 datediff函数: DATEDIFF ( datepart , startdate , enddate )datepart的取值可以是year,quarter,Month,dayofyear,Day,Week,Hour,minute,second,millisecond startdate 是从 enddate 减去。如果 startdate 比 enddate 晚&#xff0c;返回负值。 2 例子 删除2023年以…

2023前端面试笔记 —— CSS3

系列文章目录 内容链接2023前端面试笔记HTML52023前端面试笔记CSS3 文章目录 系列文章目录前言一、CSS选择器的优先级二、通过 CSS 的哪些方式可以实现隐藏页面上的元素三、px、em、rem之间有什么区别&#xff1f;四、让元素水平居中的方法有哪些五、在 CSS 中有哪些定位方式六…

DETRs with Collaborative Hybrid Assignments Training论文笔记

Title&#xff1a;[DETRs with Collaborative Hybrid Assignments Training Code 文章目录 1. Motivation2. one to one VS one to many3. Method&#xff08;1&#xff09;Encoder feature learning&#xff08;2&#xff09;Decoder attention learning 1. Motivation 当前…

正确进行自动化测试

前言&#xff1a; &#x1f4d5;作者简介&#xff1a;热爱编程的小七&#xff0c;致力于C、Java、Python等多编程语言&#xff0c;热爱编程和长板的运动少年&#xff01; &#x1f4d8;相关专栏Java基础语法&#xff0c;JavaEE初阶&#xff0c;数据库&#xff0c;数据结构和算法…

论文阅读及复现——《CT_ICP: Real-time Elastic LiDAR Odometry with Loop Closure》

论文阅读之——《CT_ICP: Real-time Elastic LiDAR Odometry with Loop Closure》带闭环的实时弹性激光雷达里程计 1. 主要贡献2. 相关说明3. 激光里程计3.1 里程计公式构建3.2 局部地图与健壮性 4. 回环检测与后端5. 实验结果5.1 里程计实验结果5.2 回环检测实验结果 6. 总结…

opencv-答题卡识别判卷

#导入工具包 import numpy as np import argparse import imutils import cv2# 设置参数 ap argparse.ArgumentParser() ap.add_argument("-i", "--image", requiredTrue,help"path to the input image") args vars(ap.parse_args())# 正确答案…

【附安装包】Vred2023安装教程

软件下载 软件&#xff1a;Vred版本&#xff1a;2023语言&#xff1a;简体中文大小&#xff1a;2.39G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.com…

Nginx 高级配置

目录 1 网页的状态页 2 Nginx 第三方模块 2.1 ehco 模块 3 变量 3.1 内置 3.2 定义变量 4 Nginx压缩功能 5 https 功能 6 自定义图标 1 网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现&#xff0c;在编译安装nginx的时候需要添加编译参数 --with-http…

pytest之parametrize参数化

前言 我们都知道pytest和unittest是兼容的&#xff0c;但是它也有不兼容的地方&#xff0c;比如ddt数据驱动&#xff0c;测试夹具fixtures&#xff08;即setup、teardown&#xff09;这些功能在pytest中都不能使用了&#xff0c;因为pytest已经不再继承unittest了。 不使用dd…

3 自制一个集群分发脚本

1. 随便取了一个名字&#xff1a;xsync 2. 在一个配置环境变量的目录下&#xff0c;我是放在了/opt/software下&#xff0c;这个路径我是配置了环境变量的。 3. 编辑脚本&#xff1a;vim xsync #!/bin/bash#1. 判断参数个数 if [ $# -lt 1 ] thenecho Not Enough Arguement!…

海康摄像头通过SDK接入到LiveNVR实现双向语音喊话对讲与网页无插件播放,并支持GB28181级联语音对讲...

目录 1、确认摄像头是否支持对讲2、摄像头视频类型复合流3、通道配置SDK接入4、视频广场点击播放5、相关问题 5.1、如何配置通道获取直播流&#xff1f;5.2、如何GB28181级联国标平台&#xff1f;6、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、确认摄像头是否支持对讲 可以访问摄…

为什么使用Nacos而不是Eureka(Nacos和Eureka的区别)

文章目录 前言一、Eureka是什么&#xff1f;二、Nacos是什么&#xff1f;三、Nacos和Eureka的区别3.1 支持的CAP3.2连接方式3.3 服务异常剔除3.4 操作实例方式 总结 前言 为什么如今微服务注册中心用Nacos相对比用Eureka的多了&#xff1f;本文章将介绍他们之间的区别和优缺点…

SemrushBot蜘蛛爬虫屏蔽方式

查看访问日志时候发现有SemrushBot爬虫 屏蔽方法&#xff1a; 使用robots.txt文件是一种标准的协议,用于告诉搜索引擎哪些页面可以和不能被爬取,如想禁止Googlebot爬取整个网站的话,可以在该文件中添加以下内容: User-agent: Googlebot Disallow: / 对于遵循robots协议的蜘蛛…