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

使用QXmlStreamReader方法读取xml文件

cpp 复制代码
#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文件

cpp 复制代码
// 保存按钮,导出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("学校信息");//写入节点

        // 示例1
        Writer.writeStartElement("人物信息");
            Writer.writeTextElement("人物ID", "1"); //写入节点属性,只能放QString!
            Writer.writeTextElement("人物名称", "某人");
            Writer.writeTextElement("人物类型", "类型1");
            Writer.writeTextElement("人物说明", "无说明");
        Writer.writeEndElement();

        // 示例2
        Writer.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如下所示:

cpp 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<学校信息>
    <人物信息>
        <人物ID>1</任务组ID>
        <人物名称>某人</任务组名称>
        <人物类型>类型1</任务组类型>
        <人物说明>无说明</任务组说明>
    </人物信息>
    <工作信息>
        <工作名称>IT工作者</部队名称>
        <所属省份>湖南省</所属国家>
        <工作类型>算法</部队类型>
        <工作所处位置的经纬度>
            <经度>东经101</经度>
            <纬度>北纬202</纬度>
        </工作所处位置的经纬度>
    </工作信息>
</学校信息>
相关推荐
SuperherRo2 小时前
Web攻防-XML&XXE&无回显带外&SSRF元数据&DTD实体&OOB盲注&文件拓展
xml·xxe·ssrf·dtd·无回显·文件扩展·oob盲注
资讯第一线2 小时前
MSXML 6.0 SP1 x86 x64 (XML解析器) 下载
xml
秋千码途2 小时前
小架构step系列08:logback.xml的配置
xml·java·logback
sleepcattt8 小时前
Spring中Bean的实例化(xml)
xml·java·spring
旷世奇才李先生16 小时前
XML DOM 安装使用教程
xml·前端·chrome
椰椰椰耶2 天前
【MyBatis】XML实现,配置方法和增、删、改、查
xml·oracle·mybatis
旷世奇才李先生2 天前
XML Schema 安装使用教程
xml
ddfa12343 天前
XML 笔记
xml·服务器
一勺菠萝丶4 天前
Spring Boot + MyBatis/MyBatis Plus:XML中循环处理List参数的终极指南
xml·spring boot·mybatis
前端开发与ui设计的老司机6 天前
数字孪生技术为UI前端注入灵魂:实现产品全生命周期的可视化管理
前端·ui·命令模式