当前位置: 首页 > news >正文

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

使用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文件


// 保存按钮,导出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</纬度></工作所处位置的经纬度></工作信息>
</学校信息>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 程序设计—基于网络爬虫的股票价格分析系统 项目源码27486
  • axios发送post请求实例
  • Python基本语法知识点
  • 高级java每日一道面试题-2024年9月01日-基础篇-事物的隔离级别?
  • 【AI大模型】基于docker部署向量数据库Milvus和可视化工具Attu详解步骤
  • 【ArcGIS/GeoScenePro】Portal和Server关系
  • Https 加密原理
  • hyperf json-rpc
  • Linux/ubuntu常用命令, 网络-2
  • easyExcel 单元格合并
  • Unity坐标系计算3D中两直线的最短距离及最近点的几何原理
  • 虚幻5|(1)技能栏快捷格子的制作|(2)如何在游戏进行的时候显示鼠标,使用鼠标操作UI||(3)改进技能释放
  • 论文速读|RoboCasa:用于通用家用机器人的大规模日常任务模拟
  • GIT 下载安装使用教程
  • SVN提取子目录到新库(附带提交历史)方法
  • 收藏网友的 源程序下载网
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 「译」Node.js Streams 基础
  • Django 博客开发教程 8 - 博客文章详情页
  • extract-text-webpack-plugin用法
  • javascript面向对象之创建对象
  • JS笔记四:作用域、变量(函数)提升
  • spring boot下thymeleaf全局静态变量配置
  • unity如何实现一个固定宽度的orthagraphic相机
  • 搭建gitbook 和 访问权限认证
  • 订阅Forge Viewer所有的事件
  • 服务器之间,相同帐号,实现免密钥登录
  • 探索 JS 中的模块化
  • 写代码的正确姿势
  • 译有关态射的一切
  • 再次简单明了总结flex布局,一看就懂...
  • 再谈express与koa的对比
  • 正则表达式
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • zabbix3.2监控linux磁盘IO
  • 从如何停掉 Promise 链说起
  • 正则表达式-基础知识Review
  • ​数据链路层——流量控制可靠传输机制 ​
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #APPINVENTOR学习记录
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $refs 、$nextTic、动态组件、name的使用
  • (12)Hive调优——count distinct去重优化
  • (7)svelte 教程: Props(属性)
  • (C语言)二分查找 超详细
  • (k8s)Kubernetes本地存储接入
  • (附源码)计算机毕业设计大学生兼职系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (十六)视图变换 正交投影 透视投影
  • (十一)c52学习之旅-动态数码管
  • (一)kafka实战——kafka源码编译启动
  • (转)IOS中获取各种文件的目录路径的方法