XML文件读取显示更改删除查找demo

Posted geek-zhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML文件读取显示更改删除查找demo相关的知识,希望对你有一定的参考价值。

(该例子参考《Qt Creator快速入门 第三版》src1717-10)

1、pro中添加如下代码

QT       += xml

 

2、UI界面设计如下图所示

技术图片

 

3、代码部分

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#if _MSC_VER >=1600    // MSVC2015>1899,对于MSVC2010以上版本都可以使用
#pragma execution_character_set("utf-8")
#endif

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

    void doXml(const QString operate);  // 用于功能判断

private slots:
    void on_showBtn_clicked();

    void on_addBtn_clicked();

    void on_deleteBtn_clicked();

    void on_updateBtn_clicked();

    void on_findBtn_clicked();

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

#include "mainwindow.h"#include "ui_mainwindow.h"#include<QtXml>#include<QFile>



#if _MSC_VER >=1600    // MSVC2015>1899,对于MSVC2010以上版本都可以使用
#pragma execution_character_set("utf-8")
#endif

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

    QDomDocument doc;
    QDomProcessingInstruction instruction;
    instruction = doc.createProcessingInstruction("xml",
                                                  "version = "1.0"  encoding = "UTF-8"");
    doc.appendChild(instruction);

    // 添加根元素
    QDomElement root = doc.createElement("library");
    doc.appendChild(root);
    QDomElement book = doc.createElement("book");
    QDomAttr id = doc.createAttribute("id");
    QDomElement title = doc.createElement("name");
    QDomElement author = doc.createElement("author");
    QDomText text;
    id.setValue(QString("1"));
    book.setAttributeNode(id);
    text = doc.createTextNode("Qt");
    title.appendChild(text);
    text = doc.createTextNode("shiming");
    author.appendChild(text);
    book.appendChild(title);
    book.appendChild(author);
    root.appendChild(book);

    book = doc.createElement("book");
    id = doc.createAttribute("id");
    title = doc.createElement("name");
    author = doc.createElement("author");
    id.setValue(QString("2"));
    book.setAttributeNode(id);
    text = doc.createTextNode("Linux");
    title.appendChild(text);
    text = doc.createTextNode("zk");
    author.appendChild(text);
    book.appendChild(title);
    book.appendChild(author);
    root.appendChild(book);

    QFile file("my.xml");
    if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return ;
    QTextStream out(&file);
    doc.save(out, 4);
    file.close();
}

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

void MainWindow::doXml(const QString operate)
{
    ui->listWidget->clear();
    ui->listWidget->addItem("没有找到相关内容");
    QFile file("my.xml");
    if(!file.open(QIODevice::ReadOnly)) return ;
    QDomDocument doc;
    if(!doc.setContent(&file))
    {
        file.close();
        return ;
    }
    file.close();
    QDomNodeList list = doc.elementsByTagName("book");

    for (int i = 0; i < list.count(); i++)
    {
        QDomElement e = list.at(i).toElement();
if(e.attribute("id") == ui->lineEdit->text())  // 判断节点 { if(operate == "delete") { QDomElement root = doc.documentElement(); root.removeChild(list.at(i)); QFile file("my.xml"); if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return; QTextStream out(&file); doc.save(out, 4); file.close(); ui->listWidget->clear(); ui->listWidget->addItem("删除成功~"); } else if(operate == "update")  // 更新节点内容 { QDomNodeList child = list.at(i).childNodes(); child.at(0).toElement().firstChild().setNodeValue( ui->lineEdit_2->text()); child.at(1).toElement().firstChild().setNodeValue( ui->lineEdit_3->text()); QFile file("my.xml"); if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return; QTextStream out(&file); doc.save(out, 4); file.close(); ui->listWidget->clear(); ui->listWidget->addItem("更新成功~"); } else if(operate == "find") { ui->listWidget->clear(); ui->listWidget->addItem(e.tagName() + e.attribute("id")); QDomNodeList list = e.childNodes(); for(int i = 0; i< list.count(); i++) { QDomNode node = list.at(i); if(node.isElement()) ui->listWidget->addItem(" " + node.toElement().tagName() + " : " + node.toElement().text()); } } } } } void MainWindow::on_showBtn_clicked() { ui->listWidget->clear(); QFile file("my.xml"); if(!file.open(QIODevice::ReadOnly)) return ; QDomDocument doc; if(!doc.setContent(&file)) { file.close(); return ; } file.close(); QDomElement docElem = doc.documentElement(); ui->listWidget->addItem(docElem.tagName()); QDomNode n = docElem.firstChild(); while (!n.isNull()) { if(n.isElement()) { QDomElement e = n.toElement(); ui->listWidget->addItem(" " + e.tagName() + e.attribute("id")); QDomNodeList list = e.childNodes(); for(int i = 0; i< list.count(); i++) { QDomNode node = list.at(i); if(node.isElement()) ui->listWidget->addItem(" " + node.toElement().tagName() + " : " + node.toElement().text()); } } n = n.nextSibling(); } } void MainWindow::on_addBtn_clicked() { ui->listWidget->clear(); ui->listWidget->addItem("无法添加..."); QFile file("my.xml"); if(!file.open(QIODevice::ReadOnly)) return ; QDomDocument doc; if(!doc.setContent(&file)) { file.close(); return ; } file.close(); QDomElement root = doc.documentElement(); QDomElement book = doc.createElement("book"); QDomAttr id = doc.createAttribute("id"); QDomElement title = doc.createElement("name"); QDomElement author = doc.createElement("author"); QDomText text; QString num = root.lastChild().toElement().attribute("id"); int count = num.toInt() + 1; id.setValue(QString::number(count)); book.setAttributeNode(id); text = doc.createTextNode(ui->lineEdit_2->text()); title.appendChild(text); text = doc.createTextNode(ui->lineEdit_3->text()); author.appendChild(text); book.appendChild(title); book.appendChild(author); root.appendChild(book); if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return; QTextStream out(&file); doc.save(out, 4); file.close(); ui->listWidget->clear(); ui->listWidget->addItem("添加成功~"); } void MainWindow::on_deleteBtn_clicked() { doXml("delete"); } void MainWindow::on_updateBtn_clicked() { doXml("update"); } void MainWindow::on_findBtn_clicked() { doXml("find"); }
 

以上是关于XML文件读取显示更改删除查找demo的主要内容,如果未能解决你的问题,请参考以下文章

从 xml 片段中删除 html 标签? [复制]

c#读取xml文件配置文件Winform及WebForm-Demo具体解释

片段中的按钮自定义视图

kotlin-从一个片段更改多个片段的小数位

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

片段事务中的实例化错误