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文件,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>  
<data>  
    <name>John Doe</name>  
    <age>30</age>  
    <email>johndoe@example.com</email>  
</data>

1)读取XML文件:

#include <QCoreApplication>  
#include <QFile>  
#include <QDomDocument>  
#include <QDomElement>  
#include <QDebug>  
  
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 <QCoreApplication>  
#include <QFile>  
#include <QDomDocument>  
#include <QDomElement>  
#include <QTextStream>  
#include <QDebug>  
  
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;  
}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

付宇利

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值