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>[email protected]email>  
data>

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;  
}

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("[email protected]"));  
    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;  
}

你可能感兴趣的:(qt,xml,数据库)