Qt中使用QXmlStreamReader读取xml文件中遇到的问题

news2024/11/15 5:04:47

Qt系列文章目录

文章目录

  • Qt系列文章目录
  • 前言
  • 一、为什么xml.readElementText()是空的
  • 问题原因
  • QXmlStreamReader类简介

前言

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <yolov5>E:/work/python_jdk/yolov5/dist/detect/detect.exe</yolov5>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>
QString parseXml(QString xmlFile, QString nodeName)
    {
        QFile file(xmlFile);
        if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
            qDebug() << "Cannot open file";
            return "Cannot open file";
        }

        QXmlStreamReader xml(&file);
        QString nodeContent;

        while(!xml.atEnd() && !xml.hasError()) {
            xml.readNext();

            if(xml.isStartElement()) {
                if(xml.name() == nodeName) {
                    nodeContent = xml.readElementText();
                    qDebug() << "Content of " << nodeName << ":" << xml.readElementText();

                    qDebug() << "nodeContent" << nodeContent;
                    break;
                }
            }
        }

        if(xml.hasError()) {
            qDebug() << "XML Error:" << xml.errorString();
            return xml.errorString();
        }

        xml.clear();
        file.close();

        return nodeContent;
    }

上面是第一段是xml文本,第二段是读取xml文件内容的代码

一、为什么xml.readElementText()是空的

在这里插入图片描述

问题原因

这是因为QXmlStreamReader::readElementText()这个函数在被调用后,内部的位置会被更新到当前标签的结束位置。因此,当你连续两次调用xml.readElementText()时,第二次的调用实际上是在的位置,此时并没有可以读取的内容,所以返回空字符串。

你的代码应该在第一次调用readElementText()时就把结果保存下来

QXmlStreamReader类简介

简介, 对于 XML 的内容,通常情况下,我们只关心 XML 元素的解析。这时,可以通过 QXmlStreamReader 中的便利函数 readNextStartElement() 来实现。 简述 详细介绍 使用 更多参考 详细介绍 之前使用的方式主要使用 readNext() 来读取下一个标记,并返回对应的类型。

QStringRef documentEncoding(); //获取XML编码,如果XML声明中未指定,则返回NULL
QStringRef documentVersion () ; //获取XML版本,如果XML声明中未指定,则返回NULL
bool atEnd ();
//如果读者一直读到XML文档的末尾,或者出现了错误,并且阅读被中止,那么返回true。否则,它将返回false。
//读取XML内容,如果读到XML末尾,或者读取出错时,将返回true,否则返回false
//当返回true时,可以通过error()判断是否读取出错
Error error () ; //返回错误类型,如果未出错,将返回QXmlStreamReader::NoError(数值0)

void raiseError ( constQString & message = QString() );
//主动上报错误,并填入message 错误信息(可以通过errorString()获取),可以使得下次调用atEnd()时,直接返回true值
QString errorString();
//获取发生的错误信息

void QXmlStreamReader::setDevice ( QIODevice *device );
//设置QXmlStreamReader的解析设备,等价于QXmlStreamReader ( QIODevice *)构造函数
TokenType readNext(); //读取一次记号,并返回该数据的标志位,也可以通过
//常用标记如下所示:
QXmlStreamReader::StartDocument //文档开始位置,用来定义XML版本,编码等信息,
QXmlStreamReader::StartElement //元素开始位置
QXmlStreamReader::EndElement //元素结束位置
//比如Anna
// 元素便是元素开始以及结束位置.
//“Anna”信息可以通过readElementText()成员函数获取.

QXmlStreamAttributes attributes(); //获取元素的属性
//比如
//通过attributes().value(“term”).toString()则可以得到元素值"of pictures"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

终于有人把 Java 面试高分 Guide 总结得如此系统,堪称傻瓜式笔记总结

纵观今年的技术招聘市场&#xff0c; Java 依旧是当仁不让的霸主 &#xff01;即便遭受 Go 等新兴语言不断冲击&#xff0c;依旧岿然不动。究其原因&#xff1a; Java 有着极其成熟的生态&#xff0c;这个不用我多说&#xff1b; Java 在 运维、可观测性、可监 控性方面都有着…

OpenCV(图像颜色空间变换)

目录 1、分类 1.1 RGB颜色模型 1.2 HSV颜色模型 1.3 GRAY颜色模型 2、图像数据类型间的相互转换 3 、颜色转换函数 1、分类 RGB\HSV\GRAY颜色模型。 1.1 RGB颜色模型 1.2 HSV颜色模型 1.3 GRAY颜色模型 2、图像数据类型间的相互转换 3 、颜色转换函数 第四个参数使用例子…

60、使用MNN+DBNET进行二维码检测

基本思想&#xff1a;顺手转了个模型&#xff0c;可以方便进行条形码和对应的数字检测&#xff0c;以方便下一步进行条形码识别和ocr进行数字检测(这里只检测暂不识别&#xff0c;识别暂定下一篇) cmakelists.txt cmake_minimum_required(VERSION 3.16) project(untitled22) s…

两台电脑之间传输文件——就近共享

文章目录 背景步骤补充&#xff1a;跨设备共享 背景 两台电脑之间共享文件有很多种方式&#xff0c;这里介绍一种最简洁的——Windows自带的就近共享。它适合偶尔传输一些简单文件。比如把笔记本上的电子书传输到surface上阅读。 注意: 如果共享的电脑正在运行最新版本的Wind…

js对象数组去重:

目录 双层for循环&#xff1a; indexof()&#xff1a; map方法(推荐)&#xff1a; 双层for循环&#xff1a; ​ //双层for循环let arrObj [{name: "小红",id: 1},{name: "小橙",id: 1},{name: "小黄",id: 4},{name: "小绿",id: 3}…

软件设计模式与体系结构-设计模式-结构型软件设计模式-组合模式

目录 结构型软件设计模式概述 一、组合模式动机组合模式结构实例一&#xff1a;五子棋游戏实例二&#xff1a;空军指挥系统关于组合模式的讨论1. 安全形式的组合模式2. 透明形式的组合模式优缺点适用环境 课程作业 结构型软件设计模式 概述 动机 结构型软件设计模式的主要目的…

C++语言之 do-while 语句

有时候&#xff0c;使用 while 语句会想要先执行一遍循环体&#xff0c;这就可以使用 do-while 语句。下面会介绍 do-whie 语句。 目录 1.格式 1.1 格式1 1.2 格式2 2.执行过程 3.例题 1.格式 如果主体中只有单个语句的话&#xff0c;花括号可以省略。&#xff08;如格式…

Http host 标头攻击

一、什么是http host 标头攻击 HTTP Host 标头攻击是一种网络安全攻击技术&#xff0c;利用了 HTTP 协议中的 Host 标头字段的漏洞。Host 标头字段用于指定客户端请求的目标主机名或域名。 攻击者可以通过构造恶意的 HTTP 请求&#xff0c;伪造或篡改 Host 标头字段的值&#x…

【Python从入门到进阶】urllib的异常处理

接上篇《25、urllib获取快餐网站店铺数据》 上一篇我们讲解了如何使用urllib的post请求抓取某某快餐网站店铺数据。本篇我们来讲解urllib的异常处理机制。 一、异常处理的重要性 在编程过程中&#xff0c;无论是与网络交互还是执行其他操作&#xff0c;都存在各种意外和错误可…

阿里云外网无法访问Dcoker容器

应该是docker和linux网段冲突 1、路由策略开启转发 cat >> /etc/sysctl.conf <<EOF net.ipv4.ip_forward 1 net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-arptables 1 EOF sysctl -p 2、查看配置…

spring boot security自定义认证

前言 前置阅读 spring boot security快速使用示例 spring boot security之前后端分离配置 说明 实际场景&#xff0c;我们一般是把用户信息保存在db中&#xff08;也可能是调用三方接口&#xff09;&#xff0c;需要自定义用户信息加载或认证部分的逻辑&#xff0c;下面提供…

第三章javascript类型,值和变量

第三章类型,值和变量 计算机程序通过操作值(数值3.14)或文本(如"hello world")来工作,编程语言中这些可以表示操作的值被称为类型,而一门语言支持的类型集支持的类型集也是这门语言最基本的特征. 程序在需要吧某个值保存下来以便将来使用时,会把这个值赋给(或存入)…

UE4/5GeneratedDynamicMeshActor生成建模方块【更多建模的函数就等你自己去探索把,Append ...】

目录 装备工作 逻辑制作&#xff1a; 之前我们讲了很多关于GeneratedDynamicMeshActor复制别的网格体的东西&#xff0c;以及替换到网格体里面&#xff0c;但会发现这样终究是没什么用&#xff0c;所以这里我们来讲解一下&#xff0c;不用其他的网格体让GeneratedDynamicMesh…

Tuxera NTFS2023Mac标准版读写NTFS格式硬盘

NTFS是什么&#xff1f;这是微软随Windows系统开发的一种文件格式&#xff0c;专门为网络和磁盘配额、文件加密等管理安全特性设计。比起FAT格式&#xff0c;NTFS属于一种较为新型的磁盘格式。现在我们使用的u盘很大一部分都是NTFS格式。 那有小伙伴会询问&#xff0c;想在Mac系…

SpringSecurity(三):自定义认证数据源(源码+落地实现)。

自定义认证数据源 前言认证流程分析易混梳理AuthenticationManager 与 ProviderManagerProviderManager 与 AuthenticationProvider难点&#xff1a;为什么ProviderManager会有一个parent&#xff1f; 数据源的获取配置AuthenticationManager默认的全局 AuthenticationManager自…

RabbitMQ:高效传递消息的魔法棒,一篇带你助力构建可靠的分布式系统(上篇)

目录 一 什么是MQ1.1 MQ的概念1.2 MQ的流量消峰1.3 MQ的应用解耦1.4 MQ的异步处理1.5 MQ的分类以及如何选择1.5.1 ActiveMQ1.5.2 Apache Kafka1.5.3 RabbitMQ1.5.4 RocketMQ1.5.5 四种MQ的区别 1.6 MQ的核心概念1.6.1 MQ四大核心概念1.6.2 MQ六大核心部分 1.7 安装RabbitMQ 二.…

5.3 Web服务器简介及HTTP协议

5.3 Web服务器简介及HTTP协议 Web Server&#xff08;网页服务器&#xff09; 一个Web Server就是一个服务器软件&#xff08;程序&#xff09;&#xff0c;或者是运行这个服务器软件的硬件&#xff08;计算机&#xff09;。其主要功能是通过HTTP协议与客户端&#xff08;通常…

【洛谷】B3643 图的存储(邻接矩阵+邻接表)

思路简单&#xff0c;话不多说直接上ACcode(详细注释): ACcode:(安全饲用)&#xff1a; #include<bits/stdc.h> using namespace std; #define int long long const int N1e310; int mp[N][N],n,m; vector<int>v[N]; void fun1(){//邻接矩阵打印 for(int i1;i<…

学成在线----项目优化

1、项目优化-redis缓存 2、缓存穿透 使用缓存后代码的性能有了很大的提高&#xff0c;虽然性能有很大的提升但是控制台打出了很多“从数据库查询”的日志&#xff0c;明明判断了如果缓存存在课程信息则从缓存查询&#xff0c;为什么要有这么多从数据库查询的请求的&#xff1f…

RedmiBook Pro 15S AMD Ryzen 7 5800H电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件配置 硬件型号驱动情况 主板RedmiBook Pro 15S 2021 处理器AMD Ryzen™ 7 5800H已驱动 内存16 GB 3200 MHz DDR4已驱动 硬盘Samsung 970EVO 512GB已驱动 显卡HD …