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

2024-08-30 22:20

本文主要是介绍读取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</纬度></工作所处位置的经纬度></工作信息>
</学校信息>

这篇关于读取xml的内容并显示在textEdit中,导出xml文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122094

相关文章

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3