• QT之xml文件的读写


    QT之xml文件的读写

    简介

    QT的QDomDocument、QDomElement、QDomNode是Qt XML模块中的三个类,用于解析和操作XML文档

    1)QDomDocument类:
    QDomDocument类表示整个XML文档。它提供了解析XML文档的方法,如setContent()和setContent(),以及生成XML文档的方法,如toByteArray()和toString()。
    QDomDocument类还包括一些常用的操作,如创建新元素(createElement())、创建新文本节点(createTextNode())和创建新注释(createComment())。

    2. QDomElement类:
    QDomElement类表示XML文档中的一个元素。它提供了获取和设置元素名称(tagName()和setTagName())、获取和设置元素属性(attribute()和setAttribute())以及获取和设置元素文本内容(text()和setText())的方法。

    QDomElement类还包括一些用于遍历和操作子元素的方法,如firstChildElement()、lastChildElement()、nextElementSibling()和previousElementSibling()。这些方法可以方便地遍历元素的子元素和兄弟元素。

    3. QDomNode类:
    QDomNode类表示XML文档中的一个节点,可以是元素、文本节点或注释等。它提供了一些基本的方法,如获取节点类型(nodeType())、获取节点名称(nodeName())和获取节点值(nodeValue())。

    QDomNode类还包括一些用于遍历节点的方法,如firstChild()、lastChild()、nextSibling()和previousSibling()。这些方法可以方便地遍历节点的子节点和兄弟节点。

    用法举例

    首先,我们假设有一个名为"example.xml"的XML文件,其内容如下:

      
    <data>  
        <name>John Doename>  
        <age>30age>  
        <email>johndoe@example.comemail>  
    data>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1)读取XML文件:

    #include   
    #include   
    #include   
    #include   
    #include   
      
    int main(int argc, char *argv[])  
    {  
        QCoreApplication a(argc, argv);  
      
        QString fileName = "example.xml";  
        QFile file(fileName);  
        if (!file.open(QIODevice::ReadOnly)) {  
            qDebug() << "Failed to open file:" << fileName;  
            return -1;  
        }  
      
        QDomDocument doc;  
        if (!doc.setContent(&file)) {  
            qDebug() << "Failed to parse XML file:" << fileName;  
            file.close();  
            return -1;  
        }  
        file.close();  
      
        QDomElement root = doc.documentElement();  
        QDomNode n = root.firstChild();  
        while (!n.isNull()) {  
            QDomElement e = n.toElement();  
            if (!e.isNull()) {  
                qDebug() << e.tagName() << ":" << e.text();  
            }  
            n = n.nextSibling(); // 获取下一个子节点  
        }  
      
        return 0;  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    2)写入XML文件:

    #include   
    #include   
    #include   
    #include   
    #include   
    #include   
      
    int main(int argc, char *argv[])  
    {  
        QCoreApplication a(argc, argv);  
      
        QString fileName = "output.xml";  
        QDomDocument doc;  
        QDomElement root = doc.createElement("data");  
        doc.appendChild(root);  
      
        QDomElement nameElement = doc.createElement("name");  
        nameElement.appendChild(doc.createTextNode("John Doe"));  
        root.appendChild(nameElement);  
      
        QDomElement ageElement = doc.createElement("age");  
        ageElement.appendChild(doc.createTextNode("30"));  
        root.appendChild(ageElement);  
      
        QDomElement emailElement = doc.createElement("email");  
        emailElement.appendChild(doc.createTextNode("johndoe@example.com"));  
        root.appendChild(emailElement);  
      
        QFile file(fileName);  
        if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {  
            qDebug() << "Failed to open file:" << fileName;  
            return -1;  
        }  
      
        QTextStream stream(&file);  
        doc.save(stream, 4); // 设置缩进为4个空格  
        file.close();  
      
        return 0;  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
  • 相关阅读:
    Hazelcast系列(三):hazelcast集成(服务器/客户端)
    TensorFlow入门(二十四、初始化学习参数)
    Android音频子系统(十一)------耳机返听(耳返)原理实现
    图像文本跨模态细粒度语义对齐-置信度校正机制 AAAI2022
    Mathorcup数学建模竞赛第四届-【妈妈杯】B题:基于协同过滤的智能书籍推荐系统(附解题思路和MATLAB代码实现)
    flume的安装配置笔记
    批量虚化边框并一键褪色的简单教程
    Kafaka丢消息吗
    【655. 输出二叉树】
    SpringBoot接口 - 如何优雅的对参数进行校验?
  • 原文地址:https://blog.csdn.net/techenliu/article/details/133385506