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();
        }
    }
}
相关推荐
L_autinue_Star26 分钟前
手写vector容器:C++模板实战指南(从0到1掌握泛型编程)
java·c语言·开发语言·c++·学习·stl
代码的余温26 分钟前
Logback.xml配置详解与实战指南
xml·logback
无小道3 小时前
c++--typedef和#define的用法及区别
c语言·开发语言·汇编·c++
mit6.8243 小时前
[Vroom] 位置与矩阵 | 路由集成 | 抽象,解耦与通信
c++·人工智能·算法
ChuHsiang4 小时前
【C++】模板(二)
c++
沙振宇4 小时前
【Qt 学习之路】Qt Android开发环境搭建:Ubuntu的Vmware虚拟机中的踩坑实录
android·qt·学习
鸥梨菌Honevid4 小时前
QT解析文本框数据——概述
数据库·qt·mysql
给自己记录用4 小时前
qt笔记(1)——Qtablewidget使用
笔记·qt
小林C语言5 小时前
11.9 C++对象指针
c++
oioihoii5 小时前
C++11中的std::minmax与std::minmax_element:原理解析与实战
java·开发语言·c++