news 2026/9/24 18:16:48

Qt读XML文件的步骤

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt读XML文件的步骤

Qt写XML文件的步骤

1、基本使用方法

// 头文件 #include <QDebug> #include <QFile> #include <QIODevice> #include <QString> #include <QXmlStreamReader> #include <QXmlStreamAttribute> #include <QXmlStreamAttributes> #define cout qDebug() << "[" << __FILE__ << ":" << __LINE__ << "]:" // 读取xml的函数 void readXmlFile(const QString& filePath) { QFile file(filePath); if( !file.open(QIODevice::ReadOnly | QIODevice::Text ) ) { cout << "file open error!"; return; } QXmlStreamReader xml(&file); while( !xml.atEnd() && !xml.hasError() ) { QXmlStreamReader::TokenType token = xml.readNext(); switch(token) { // 读取头部 case QXmlStreamReader::StartDocument: { cout << xml.documentVersion().toString(); cout << xml.documentEncoding().toString(); }; break; // 读取开头元素和该元素属性 case QXmlStreamReader::StartElement: { cout << xml.name().toString(); QXmlStreamAttributes attrs = xml.attributes(); for( const QXmlStreamAttribute& attr : attrs ) { cout << attr.name().toString(); cout << attr.value().toString(); } }; break; // 读取元素的文本内容 case QXmlStreamReader::Characters: { if( !xml.isWhitespace() ) // 不输出回车换行 { cout << xml.text().toString(); } }; break; // 读取元素结尾 case QXmlStreamReader::EndElement: { cout << xml.name().toString(); }; break; // 文件末尾 case QXmlStreamReader::EndDocument: { cout << QString::fromLocal8Bit("xml读取完毕"); }; break; } } file.close(); } // 函数使用方法 int main(int argc, char * argv[]) { readXmlFile("./template.xml"); system("pause"); // 需要添加头文件,#include <stdlib.h> return 0; }

2、进阶用法

按元素块读取数据

// 头文件 #include <QDebug> #include <QFile> #include <QIODevice> #include <QString> #include <QXmlStreamReader> #include <QXmlStreamAttribute> #include <QXmlStreamAttributes> #define cout qDebug() << "[" << __FILE__ << ":" << __LINE__ << "]:" void readElementBlock(QXmlStreamReader& xml, const QString& elementName) { // 输出该元素头信息 cout << xml.name().toString(); QXmlStreamAttributes attrs = xml.attributes(); for( const QXmlStreamAttribute& attr : attrs ) { cout << attr.name().toString(); cout << attr.value().toString(); } while( !xml.atEnd() && !xml.hasError() ) { QXmlStreamReader::TokenType token = xml.readNext(); switch(token) { case QXmlStreamReader::StartElement: { cout << xml.name().toString(); QXmlStreamAttributes childAttrs = xml.attributes(); for( const QXmlStreamAttribute& childAttr : childAttrs ) { cout << childAttr.name().toString(); cout << childAttr.value().toString(); } }; break; case QXmlStreamReader::Characters: { if( !xml.isWhitespace() ) // 不输出回车换行 { cout << xml.text().toString(); } }; break; case QXmlStreamReader::EndElement: { if( xml.name().toString() == elementName ) { cout << xml.name().toString(); return; } cout << xml.name().toString(); }; break; } } } // 读取xml的函数 void readXmlFile(const QString& filePath, const QString& childName) { QFile file(filePath); if( !file.open(QIODevice::ReadOnly | QIODevice::Text ) ) { cout << "file open error!"; return; } QXmlStreamReader xml(&file); while( !xml.atEnd() && !xml.hasError() ) { QXmlStreamReader::TokenType token = xml.readNext(); switch(token) { // 读取头部 case QXmlStreamReader::StartDocument: { cout << xml.documentVersion().toString(); cout << xml.documentEncoding().toString(); }; break; // 读取开头元素和该元素属性 case QXmlStreamReader::StartElement: { // 这里可以加条件,输出你想输出的元素块 if( childName == xml.name().toString() ) { readElementBlock(xml, xml.name().toString()); } }; break; // 文件末尾 case QXmlStreamReader::EndDocument: { cout << QString::fromLocal8Bit("xml读取完毕"); }; break; } } file.close(); } // 函数使用方法 int main(int argc, char * argv[]) { readXmlFile("./template.xml", "node"); // 参数( 文件名, xml文件中的元素名 ) system("pause"); // 需要添加头文件,#include <stdlib.h> return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 18:16:32

AI辅助解锁RTX5090笔记本功耗墙:不拆机性能飙升40%

说实话&#xff0c;当我拿到这台搭载RTX 5090 Laptop GPU的旗舰游戏本时&#xff0c;第一件事就是跑了个3DMark。结果怎么形容呢&#xff0c;分数跟桌面端RTX 5070 Ti掰手腕都费劲&#xff0c;完全不是5090该有的样子。查了一圈&#xff0c;问题出在厂商默认把GPU功耗墙压得很低…

作者头像 李华
网站建设 2026/9/24 18:16:23

eNSP企业网络规划与设计:从拓扑到配置的完整落地路径

简介&#xff1a;这份资源面向网络工程初学者与备考华为认证的学习者&#xff0c;提供一套基于eNSP仿真平台的简单企业网络规划与设计完整案例。内容围绕需求分析、拓扑设计、设备配置、测试验证与优化调整展开&#xff0c;涵盖核心层、分布层、接入层的层次化网络结构&#xf…

作者头像 李华
网站建设 2026/9/24 18:16:19

基于LSTM的景泰小区水产量预测与可视化全流程

简介&#xff1a;这份资源是面向数据科学学习者与机器学习入门者的完整项目源码&#xff0c;围绕景泰小区水产量预测场景&#xff0c;用LSTM长短期记忆网络对历史水量时间序列建模&#xff0c;解决未来水产量精准预测的问题。项目共156个文件&#xff0c;压缩包约16.74MB&#…

作者头像 李华
网站建设 2026/9/24 18:15:53

ST-Transformer交通流预测:Python+PyTorch实战指南

简介&#xff1a;本资源是一套面向交通大数据分析与智能交通系统开发者的Python实践项目&#xff0c;聚焦于利用深度学习解决城市交通流短时预测问题。项目基于时空变换网络&#xff08;ST-Transformer&#xff09;架构&#xff0c;融合时空卷积与注意力机制&#xff0c;可有效…

作者头像 李华
网站建设 2026/9/24 18:15:50

Vision-LSTM实战:图像分类新选择与调参避坑指南

简介&#xff1a;这份资源面向希望将Vision-LSTM&#xff08;ViL&#xff09;落地到图像分类任务的深度学习开发者与研究者&#xff0c;提供一套可复现的实战工程。ViL以xLSTM块为核心&#xff0c;每个块包含输入门、遗忘门、输出门与内部记忆单元&#xff0c;并引入指数门控机…

作者头像 李华
网站建设 2026/9/24 18:15:34

DQN交通信号控制实战:解决相位饥饿与绿波失效

简介&#xff1a;本资源是一个基于Python与SUMO仿真的交通信号灯智能调控高分毕设项目&#xff0c;面向计算机、人工智能、自动化及交通工程等专业的本科生与研究生&#xff0c;解决城市交叉口信号配时优化这一典型控制问题。项目采用深度Q网络&#xff08;DQN&#xff09;强化…

作者头像 李华