读取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("学校信息");//写入节点

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

<?xml version="1.0" encoding="UTF-8"?>
<学校信息>
    <人物信息>
        <人物ID>1</任务组ID>
        <人物名称>某人</任务组名称>
        <人物类型>类型1</任务组类型>
        <人物说明>无说明</任务组说明>
    </人物信息>
    <工作信息>
        <工作名称>IT工作者</部队名称>
        <所属省份>湖南省</所属国家>
        <工作类型>算法</部队类型>
        <工作所处位置的经纬度>
            <经度>东经101</经度>
            <纬度>北纬202</纬度>
        </工作所处位置的经纬度>
    </工作信息>
</学校信息>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河马小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值