qt_c++_xml简单示范demo

迅雷链接

链接:https://pan.xunlei.com/s/VO8bJODxPfPHE0x3nfUa2KZ1A1?pwd=tuxq#

复制这段内容后打开手机迅雷App,查看更方便

复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTextCodec>


#include <QFile>
#include <QDomDocument>
#include <QTextStream>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE


void createXML(QString filePath);
void loadXml(QString xmlName);

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include<QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);



    QString path="C:/Users/36075/Desktop/QtC_xml/test.xml";
    createXML(path);
    loadXml(path);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void createXML(QString filePath)
{

           QFile file(filePath);

               bool isOk = file.open(QIODevice::WriteOnly);//以只写方式打开文件 isOk用来判断是否打开成功
         //      打开成功的话:
        //       第一步:创建XML文档对象,包含头文件#include <QDomDocument>  //文件
                 QDomDocument doc;
                 QDomProcessingInstruction instruction; //添加处理命令
                     instruction=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
                     doc.appendChild(instruction);

                 QDomElement root = doc.createElement("bookstore");
                     doc.appendChild(root);

                             QDomElement book = doc.createElement("book");
                             book.setAttribute("category", "C++");	//生成category节点
                             root.appendChild(book);

                             QDomElement price= doc.createElement("price");
                             book.appendChild(price);
                             QDomText text = doc.createTextNode("98");
                             price.appendChild(text);

                             book = doc.createElement("book");
                             book.setAttribute("category", QString::fromLocal8Bit("语文"));
                             root.appendChild(book);

                             price= doc.createElement("price");
                                 text = doc.createTextNode("100");
                                 price.appendChild(text);
                             book.appendChild(price);


                 QTextStream stream(&file);
                     stream.setCodec("UTF_8");
                     doc.save(stream,4,QDomNode::EncodingFromTextStream);
                     file.close();

}


void loadXml(QString xmlName)
{
    QFile file(xmlName);
    if(!file.open(QFile::ReadOnly | QFile::Text))
    {
        return;
    }

    QString strError;
    int errorLine;
    int errorColumn;
    QDomDocument doc;
    if(!doc.setContent(&file, false, &strError, &errorLine, &errorColumn)){
        return;
    }
    QDomElement root = doc.documentElement();
    if(root.tagName() == "bookstore")
    {
        QDomNode book = root.firstChild();
        while(!book.isNull())
        {
            if(book.toElement().tagName() == "book")
            {
                QString str = book.toElement().attribute("category");	//获取category属性内容
                qDebug()<<str;
                QDomNode node = book.firstChild();
                while(!node.isNull())
                {
                    if(node.toElement().tagName() == "price")
                    {
                        QString price = node.toElement().text();
                        qDebug()<<price;
                    }
                    node = node.nextSibling();
                }
            }
            book = book.nextSibling();
        }
    }
}
相关推荐
杜子不疼.5 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
sycmancia6 小时前
Qt——编辑交互功能的实现
开发语言·qt
石山代码6 小时前
C++ 内存分区 堆区
java·开发语言·c++
张小姐的猫8 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
做人求其滴11 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣
见叶之秋11 小时前
C++基础入门指南
开发语言·c++
计算机安禾11 小时前
【c++面向对象编程】第42篇:模板特化与偏特化:为特定类型定制实现
开发语言·c++·算法
qq_4017004111 小时前
Qt 项目中使用 QSS 的全面总结
开发语言·qt
玖釉-11 小时前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
小短腿的代码世界11 小时前
信号路由风暴:Qt算法交易系统的高频信号分发架构
qt·算法·架构