QT实现XML文件的写入和读取

引言

在现代软件开发中,XML文件作为一种标准的数据交换格式,被广泛应用于不同的应用程序和系统之间。在Qt框架中,提供了QXmlStreamReaderQXmlStreamWriter两个强大的类,用于读写XML文件。本文将详细介绍这两个类的使用方法,并通过实例来演示如何高效处理XML数据。

一、Qt中处理XML文件的基础

XML(可扩展标记语言)是一种用于标记电子文件使其具有结构性的标记语言。它允许用户自定义标签,使得信息分类更加清晰。Qt框架通过QXmlStreamReaderQXmlStreamWriter类提供了一个高效的方式来处理这种格式的数据。

二、使用QXmlStreamReader读取XML文件

  1. 创建QXmlStreamReader实例

  2. 遍历XML文档

  3. 处理XML元素

  4. 错误处理

三、使用QXmlStreamWriter写入XML文件

  1. 创建QXmlStreamWriter实例

  2. 写入XML元素

  3. 格式化输出

四、实际应用示例

我们以将一个QList<QString>写入XML并且进行读取为例

<?xml version="1.0" encoding="UTF-8"?>
<Tools>
    <Tool>
        <Path>F:/softfile/12.15/ANSN/ANSN/ASNS/Release/plustookitModels/ArmL-30.stl</Path>
    </Tool>
    <Tool>
        <Path>F:/softfile/12.15/ANSN/ANSN/ASNS/Release/plustookitModels/Block4x4-ThreeHoles.stl</Path>
    </Tool>
    <Tool>
        <Path>F:/softfile/12.15/ANSN/ANSN/ASNS/Release/plustookitModels/Cautery.stl</Path>
    </Tool>
</Tools>

写入函数

bool writeListToXml(const QString& filePath, const QList<QString>& list) {
    QFile file(filePath);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
        qWarning() << "Unable to open file:" << filePath;
        return false;
    }

    QXmlStreamWriter xmlWriter(&file);
    xmlWriter.setAutoFormatting(true);

    xmlWriter.writeStartDocument();
    xmlWriter.writeStartElement("Tools");

    for (const QString& toolPath : list) {
        xmlWriter.writeStartElement("Tool");
        xmlWriter.writeTextElement("Path", toolPath);
        xmlWriter.writeEndElement();
    }

    xmlWriter.writeEndElement();
    xmlWriter.writeEndDocument();

    file.close();
    return true;
}

读取函数

QList<QString> readListFromXml(const QString &filePath)
{
    QList<QString> toolsList;
    QFile file(filePath);

    if (!file.open(QIODevice::ReadOnly)) {
        qWarning() << "Unable to open file:" << filePath;
        return toolsList;
    }

    QXmlStreamReader xmlReader(&file);

    // 读取 XML 直到结束
    while (!xmlReader.atEnd() && !xmlReader.hasError()) {
        xmlReader.readNext();

        // 如果是 Tool 元素的开始
        if (xmlReader.isStartElement() && xmlReader.name() == "Tool") {
            // 读取 Tool 元素内部
            while (!(xmlReader.tokenType() == QXmlStreamReader::EndElement && xmlReader.name() == "Tool")) {
                xmlReader.readNext();

                // 如果是 Path 元素的开始
                if (xmlReader.isStartElement() && xmlReader.name() == "Path") {
                    QString toolPath = xmlReader.readElementText();
                    toolsList.append(toolPath);
                    qDebug() << toolPath;
                }
            }
        }
    }

    // 检查 XML 是否有解析错误
    if (xmlReader.hasError()) {
        qWarning() << "XML error:" << xmlReader.errorString();
    }

    file.close();
    return toolsList;
}
  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,可以使用QTreeWidget类来创建一个树形控件。要将QTreeWidget中的数据写入XML文件,可以使用QXmlStreamWriter类。以下是一个简单的示例代码: ```c++ QTreeWidget* treeWidget = new QTreeWidget(); // 添加树形控件的节点和子节点 // ... QFile file("data.xml"); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QXmlStreamWriter writer(&file); writer.setAutoFormatting(true); writer.writeStartDocument(); writer.writeStartElement("data"); // 遍历树形控件的节点和子节点,将数据写入XML文件 for (int i = ; i < treeWidget->topLevelItemCount(); i++) { QTreeWidgetItem* item = treeWidget->topLevelItem(i); writer.writeStartElement("item"); writer.writeAttribute("name", item->text()); for (int j = ; j < item->childCount(); j++) { QTreeWidgetItem* childItem = item->child(j); writer.writeStartElement("child"); writer.writeAttribute("name", childItem->text()); writer.writeEndElement(); // child } writer.writeEndElement(); // item } writer.writeEndElement(); // data writer.writeEndDocument(); file.close(); } ``` 在上面的代码中,我们首先创建了一个QTreeWidget对象,并添加了一些节点和子节点。然后,我们创建了一个QFile对象,用于将数据写入XML文件。接下来,我们使用QXmlStreamWriter类来写入XML文件。我们首先调用writeStartDocument()方法来写入XML文档的开始标记。然后,我们使用writeStartElement()方法来写入根元素的开始标记。在这个例子中,我们将根元素命名为"data"。接着,我们遍历树形控件的节点和子节点,并使用writeStartElement()方法来写入每个元素的开始标记。我们还使用writeAttribute()方法来写入元素的属性。最后,我们使用writeEndElement()方法来写入每个元素的结束标记。在写入完所有的元素后,我们使用writeEndElement()方法来写入根元素的结束标记。最后,我们调用writeEndDocument()方法来写入XML文档的结束标记。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值