读取xml的内容并显示在textEdit中,导出xml文件

embedded/2024/9/24 7:31:27/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

xml_0">使用QXmlStreamReader方法读取xml文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItemModel>
#include <QtXml>
std::vector<std::map<QString, QString>> dataVector;MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}// 按钮的槽函数
void MainWindow::on_pushButton_clicked()
{QString FilePath = "E:/QT_project/test_xml/ChairXML.xml";ShowContent(FilePath);
}// 读取某个路径的xml文件
void MainWindow::ShowContent(QString FilePath)
{LoadXmlContent(FilePath);
}// 使用QXmlStreamReader方法,并将所有信息显示在textEdit中
bool MainWindow::LoadXmlContent(QString FilePath)
{QFile file(FilePath);if (!file.open(QIODevice::ReadOnly)) {qDebug() << "Can not open file。";return false;}dataVector.clear();QXmlStreamReader reader;//创建一个阅读器reader.setDevice(&file);//设置需要读取的文件int count = 0;while(!reader.atEnd())//如果不到结尾{QXmlStreamReader::TokenType type=reader.readNext();//获取一个记号if(type==QXmlStreamReader::StartDocument)//读取XML说明{qDebug()<<reader.documentVersion()<<"  "<<reader.documentEncoding();//读取版本号和编码类型}if(type==QXmlStreamReader::StartElement)//获取元素{count++;// 将标签显示在ui上QString key = reader.name().toString();ui->textEdit->append(key);if(reader.attributes().hasAttribute("id"))//如果有属性  {count++;// qDebug()<<reader.attributes().value("id"); // 打印输出属性QString value = reader.attributes().value("id").toString();ui->textEdit->append(value);}}if(type==QXmlStreamReader::EndElement)//获取结束元素{qDebug()<<reader.name();QString name = reader.name().toString();ui->textEdit->append(name);}if(type==QXmlStreamReader::Characters&&!reader.isWhitespace()){count++;// qDebug()<<reader.text(); //打印读取内容QString value = reader.text().toString();ui->textEdit->append(value);}}if(reader.hasError()){qDebug()<<"error:"<<reader.errorString();  // 打印报错信息}file.close();//关闭文件
}

xml_103">导出xml文件


// 保存按钮,导出XML文件
void MainWindow::output_xml()
{QFile file("/home/user/output_task.xml");if(!file.open(QIODevice::WriteOnly|QIODevice::Text)){qDebug()<<"文件写入失败!";}QXmlStreamWriter Writer;Writer.setDevice(&file);//获取流Writer.setAutoFormatting(true);Writer.writeStartDocument();//添加XML说明(版本号和编码信息/*  XML写入信息主要用的函数Writer.writeStartElement("节点1"); 开始一个节点Writer.writeAttribute("节点1", "信息0");//开始一个带有信息的节点Writer.writeTextElement("节点1的信息", "信息1");Writer.writeTextElement("节点1的信息", "信息2");Writer.writeEndElement();//结束一个节点(开始和结束必须一一对应)*/// 写入数据Writer.writeStartElement("学校信息");//写入节点// 示例1Writer.writeStartElement("人物信息");Writer.writeTextElement("人物ID", "1"); //写入节点属性,只能放QString!Writer.writeTextElement("人物名称", "某人");Writer.writeTextElement("人物类型", "类型1");Writer.writeTextElement("人物说明", "无说明");Writer.writeEndElement();// 示例2Writer.writeStartElement("工作信息");Writer.writeTextElement("工作名称", "IT工作者");Writer.writeTextElement("所属省份", "湖南省");Writer.writeTextElement("工作类型", "算法");Writer.writeStartElement("工作所处位置的经纬度"); //可以在节点里再嵌入节点Writer.writeTextElement("经度", "东经101");Writer.writeTextElement("纬度", "北纬202");Writer.writeEndElement();Writer.writeEndElement();Writer.writeEndElement();  //结束节点//结束整个的文件的编辑Writer.writeEndDocument();file.close();//关闭文件
}

导出的xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<学校信息><人物信息><人物ID>1</任务组ID><人物名称>某人</任务组名称><人物类型>类型1</任务组类型><人物说明>无说明</任务组说明></人物信息><工作信息><工作名称>IT工作者</部队名称><所属省份>湖南省</所属国家><工作类型>算法</部队类型><工作所处位置的经纬度><经度>东经101</经度><纬度>北纬202</纬度></工作所处位置的经纬度></工作信息>
</学校信息>

http://www.ppmy.cn/embedded/104407.html

相关文章

看看SpringBoot的自动装配原理

SpringBoot的自动装配原理 明天面试浅浅复习一下八股文 面试官&#xff1a;说一下springboot的自动装配 像以前开发的时候&#xff0c;配置文件需要用xml和java配置类进行显式配置&#xff0c;一整就整一大堆的配置文件 then 什么是自动装配&#xff1f; Spring boot 定义了一…

springboot学习11 (菜品缓存redis)

缓存逻辑分析 目的&#xff1a;减轻数据库压力每个分类下的菜品保存一份缓存数据数据库中菜品数据有变更时清理缓存数据 keyvaluedish_1string(...)dish_2string(...)dish_3string(...) GetMapping("/list")ApiOperation("根据分类id查询菜品")public Res…

JVM 内存参数

文章目录 引言I JVM 内存参数常用参数非Heap堆内存Heap堆内存JIT编译参数GC信息打印GC参数II 例子查看JVM参数III JVM基础知识Java 语言是解释型的OpenJDK和Sun/Oracle JDK和hotspot的关系JDK、JRE、JVM 之间的关系JVM基础功能JVM组成JIT:Just In Time CompilerJVM内存区域JVM…

【awk 】如何将一个文件按照同名字段进行合并?

目录 题目解答 题目 使用awk文本处理工具将一个名为c的文件按照同名字段进行合并&#xff0c;c的内容如下所示&#xff1a; 192.168.1.1: httpd 192.168.1.1: tomcat 192.168.1.2: httpd 192.168.1.2: postfix 192.168.1.3: mysqld 192.168.1.4: httpd示例输出&#xff1a; …

【KingbaseES 人大金仓】| Docker 部署 | 详细步骤

文章目录 版本说明准备工作第 1 步:导入 Docker 镜像第 2 步:创建容器相关说明运行容器第 3 步:查看运行状态第 4 步:使用 ksql 访问数据库第 5 步:修改 license第 6 步:修改配置文件【可选】✅ 本文目标:了解 KingbaseES 数据库、了解 KingbaseES 数据库版本、Docker 部…

安卓AppBarLayout与ViewPager2里的fragment里的webview滑动冲突

今天开发遇见一个头痛的问题&#xff0c;就是AppBarLayout和webview会存在一个冲突问题。如图下 问题出现在webview推到顶端的时候&#xff0c;AppBarLayout并不会跟着响应伸缩&#xff0c;解决办法是 在 webview 包 一个 父的 NestedScrollView 就能解决了。 运行效果入下 更改…

万亿低空经济:无人机飞手考证正当时

随着低空经济的不断发展和国家政策的持续推动&#xff0c;无人机行业正迎来前所未有的发展机遇。低空经济作为一种新兴的综合性经济形态&#xff0c;依托低空空域&#xff0c;通过各类有人驾驶和无人驾驶航空器的低空飞行活动&#xff0c;辐射带动相关领域融合发展。这一领域涉…

苹果M4芯片Mac全面曝光 或10月发布

彭博社的马克・古尔曼&#xff08;Mark Gurman&#xff09;发布博文&#xff0c;曝料称苹果内部正在测试 4 款采用 M4 芯片的 Mac 设备&#xff0c;有望今年秋季&#xff08;可能是 10 月&#xff09;发布。 古尔曼表示苹果计划今年升级 MacBook Pro、Mac mini 和 iMac 产品线&…