读取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</纬度>
        </工作所处位置的经纬度>
    </工作信息>
</学校信息>
相关推荐
Luna-player2 天前
某个工程 pom.xml
xml
bikong73 天前
命令模式,餐厅订单管理系统C++
命令模式
l1t3 天前
对expat库XML_Parse函数调用优化的测试
xml·c语言·解析器·expat
l1t3 天前
利用美团龙猫添加xlsx的sheet.xml读取sharedStrings.xml中共享字符串输出到csv功能
xml·c语言·数据结构·人工智能·算法·解析器
叶 落3 天前
[Maven 基础课程]pom.xml
xml·pom.xml 常见配置项·maven 的 pom.xml
北城以北88883 天前
Java高级编程--XML
xml·java·开发语言·intellij-idea
l1t3 天前
DeepSeek辅助编写的利用quick_xml把xml转为csv的rust程序
xml·开发语言·人工智能·rust·解析器·quick-xml
l1t3 天前
how to build tbox xml into the demo
xml·linux·c语言·parser·tbox
搞全栈小苏3 天前
基于Qt QML和C++的MQTT测试客户端(CMakeLists实现)
xml·c++·qt
fatiaozhang95274 天前
中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G+32G_开启ADB ROOT安卓固件-方法3
android·xml·adb·电脑·电视盒子·刷机固件