QT学习之读取xml中信息

server/2024/9/24 15:19:00/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

背景:
我们每次注册后会生成对应的启动码文件,格式如下,启动码最后要在测试工具使用的进行一个验证,验证通过后模块才能使用。所以我希望每次的xml都放在一个文件夹里,等我选择文件夹后,能提取所有xml中的对应信息;

我的XML格式如下,我需要将里的Pid\AId\SId\ACode等都提取出来,放在表格了;

在这里插入图片描述

// 选择xml所在文件夹
void QtWidgetsApplication32::on_selecXmltDir_clicked(){m_dirXML = QFileDialog::getExistingDirectory(this, tr("打开XML所在文件夹"), "D:/", QFileDialog::ShowDirsOnly|QFileDialog::DontResolveSymlinks);ui.xmlDir->setText("xml文件夹:"+m_dirXML);
}// 生成excel文件
void QtWidgetsApplication32::on_buildExcelFile_clicked() {QDir dir(m_dirXML);if (!dir.exists()) {qWarning() << "The directory does not exist!";return;}// 文件过滤器,这里设置为获取所有文件和文件夹dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);// 将文件和文件夹排序dir.setSorting(QDir::Size | QDir::Reversed);QString csvName = "ACCode.csv";QFile fileCsv(csvName); // 打开csv文件if (!fileCsv.open(QIODevice::WriteOnly | QFile::Text)){outPutMsg(QtDebugMsg, "QtWidgetsApplication32::buildExcelFile invoke end. 打开 1.csv 失败!");return;}QTextStream stream(&fileCsv);stream << "PR_PId,PR_AId,PR_SId,PR_ACCode,PR_QueryUrl,PR_OpTime\n"; // 写入foreach(QFileInfo fileInfo, dir.entryInfoList()) {if (fileInfo.isFile()) {// outPutMsg(QtDebugMsg, "file:"+ fileInfo.absoluteFilePath());buildExcelFile(fileInfo.absoluteFilePath(), &stream);}else if (fileInfo.isDir()) {outPutMsg(QtDebugMsg, "dir:" + fileInfo.absoluteFilePath());// 目录不处理}}  fileCsv.close();ui.csvName->setText("csv文件名:"+csvName);QMessageBox::information(nullptr, "提示", "生成csv文件成功!");
}// 生成Excel文件
void QtWidgetsApplication32::buildExcelFile(QString fileNames, QTextStream * pStream) {int iRow = 0;outPutMsg(QtDebugMsg, "QtWidgetsApplication32::buildExcelFile invoke begin." + fileNames);QFile file(fileNames); // 打开xml文件if (!file.open(QIODevice::ReadOnly | QFile::Text)){outPutMsg(QtDebugMsg, "QtWidgetsApplication32::buildExcelFile invoke end. 打开" + fileNames + "失败!");return;}QXmlStreamReader reader(&file);QByteArray strACCode;while (!reader.atEnd()) {QXmlStreamReader::TokenType nType = reader.readNext();if (nType == QXmlStreamReader::StartElement) {QString tagStr = reader.name().toString();qDebug() << reader.name().toString();outPutMsg(QtDebugMsg, "tagStr=" + tagStr);if (QString::compare(tagStr, QStringLiteral("PR_PId")) == 0){QXmlStreamAttributes  Attributes = reader.attributes();if (Attributes.hasAttribute("PId")) {// 有属性的是大标签outPutMsg(QtDebugMsg, "PR_PId=" + Attributes.value("PR_PId").toString());}else { // 没有属性的是ElementTextQString text = reader.readElementText();*pStream << text;*pStream << ",";outPutMsg(QtDebugMsg, "text=" + text);}}else if (QString::compare(tagStr, QStringLiteral("ACCode")) == 0){}else if(QString::compare(tagStr, QStringLiteral("PR_OpTime")) == 0) {QString text = reader.readElementText();*pStream << text;*pStream << "\n";// 最后一个数据 做一个写cvs文件处理outPutMsg(QtDebugMsg, "PR_OpTime=" + text);}else{QString text = reader.readElementText();*pStream << text;*pStream << ",";outPutMsg(QtDebugMsg, tagStr+"=" + text);}}else{if (reader.isStartDocument()){qDebug() << reader.documentVersion().toString();qDebug() << reader.documentEncoding().toString();}if (reader.isComment()) {}}}QString filename = QString::fromLatin1(strACCode);outPutMsg(QtDebugMsg, filename);file.close();outPutMsg(QtDebugMsg, "QtWidgetsApplication32::buildExcelFile invoke end.");
}

如上所示,取属性使用QXmlStreamAttributes Attributes = reader.attributes();
取内容使用QString text = reader.readElementText();每次取完就没有了;

我提取的信息是存放在csv文件中的,如下:
QFile fileCsv(csvName); // 打开csv文件
QTextStream stream(&fileCsv);
stream << “PR_PId,PR_AId,PR_SId,PR_ACCode,PR_QueryUrl,PR_OpTime\n”; // 写入
fileCsv.close();


http://www.ppmy.cn/server/32088.html

相关文章

2024十大免费cms建站系统有哪些

2024十大免费cms建站系统有哪些&#xff1f;以下这些免费cms建站系统在不同时间点被推荐为优秀的免费建站工具&#xff0c;但请注意&#xff0c;随着时间推移&#xff0c;某些系统的商业策略可能会发生变化&#xff0c;因此上大学网&#xff08;www.sdaxue.com &#xff09;建议…

编写你的第一个 golang 的应用程序

进行你的第一个golang的程序 当你把程序都安装好以后 环境变量配置 好 vscode 插件下载好以后 1. 创建一个test.go 的文件 //主包&#xff0c;可执行文件所在包 package main//导入包 import "fmt"//主函数&#xff0c;入口函数 func main() { }2.解释 需要导入包 …

前端面试题(八)

面试形式&#xff1a;线下面试&#xff1a;一面&#xff1a;30分钟二面&#xff1a;30分钟 特殊要求&#xff1a;内网开发自研UI组件库&#xff08;无文档介绍&#xff09;学习能力要求高 面试评价&#xff1a;题目灵活应用性较强 面试官&#xff1a;项目负责人前端负责人 …

TK自动采集发布视频工具的开发教学!

随着社交媒体和短视频平台的兴起&#xff0c;内容创作与分发成为了众多创作者关注的焦点&#xff0c;TK作为一款备受欢迎的短视频平台&#xff0c;吸引了大量用户和内容创作者。 为了满足市场需求&#xff0c;许多开发者开始探索如何自动化地采集和发布视频到TK平台&#xff0…

404 Not Found - GET https://registry.npmjs.org/fs-promises

具体错误 npm install fs-promises npm ERR! code E404 npm ERR! 404 Not Found - GET https://registry.npmjs.org/fs-promises - Not found npm ERR! 404 npm ERR! 404 fs-promises* is not in this registry. npm ERR! 404 You should bug the author to publish it (or …

初识Java安装JDK17——环境变量Path

目录 环境变量path是&#xff1f;注意事项以QQ.exe为例子在任何路径下执行QQ.exe在这里插入图片描述 正式安装jdk17 并配置Path百度网盘提取JDK17 如果用集成环境开发工具idea&#xff0c;就无需配置JDK Path了。 环境变量path是&#xff1f; 在Windows操作系统中&#xff0c;…

(五)SQL系列练习题(上)创建、导入与查询 #CDA学习打卡

目录 一. 创建表 1&#xff09;创建课程表 2&#xff09;创建学生表 3&#xff09;创建教师表 4&#xff09;创建成绩表 二. 导入数据 1&#xff09;导入课程科目数据 2&#xff09;导入课程成绩数据 3&#xff09;导入学生信息数据 4&#xff09;导入教师信息数据 …

SpringBoot 自定义 HandlerMethodArgumentResolver 搞定xml泛型参数解析

文章目录 介绍一、解析简单 xml 数据案例引入 Jackson 的 xml 支持定义 Message 对象&MessageHeader 对象定义 Controller 方法调用结果 二、解析带泛型的 XML 数据案例2.1 直接给 Message 加上泛型 T2.2 无法直接解析泛型参数了 三、自定义 MVC 的参数解析器实现泛型参数解…