在Qt中处理XML文件和JSON字符串,你可以使用QDomDocumentQJsonDocument类。下面是如何在Qt中操作XML和JSON的详细示例。

操作XML文件

1. 读取XML文件

#include <QDomDocument>
#include <QFile>
#include <QDebug>

void readXml(const QString &filePath) {
    QFile file(filePath);
    if (!file.open(QIODevice::ReadOnly)) {
        qWarning() << "Failed to open file:" << file.errorString();
        return;
    }

    QDomDocument doc;
    if (!doc.setContent(&file)) {
        file.close();
        qWarning() << "Failed to parse XML.";
        return;
    }
    file.close();

    QDomElement root = doc.documentElement();
    qDebug() << "Root element:" << root.tagName();

    QDomNodeList elements = root.elementsByTagName("Child");
    for (int i = 0; i < elements.count(); ++i) {
        QDomElement element = elements.at(i).toElement();
        qDebug() << "Child element name:" << element.attribute("name");
        qDebug() << "Child element text:" << element.text();
    }
}

2. 写入XML文件

#include <QDomDocument>
#include <QFile>
#include <QTextStream>

void writeXml(const QString &filePath) {
    QDomDocument doc;
    QDomElement root = doc.createElement("Root");
    doc.appendChild(root);

    QDomElement child = doc.createElement("Child");
    child.setAttribute("name", "example");
    child.appendChild(doc.createTextNode("This is a child element."));
    root.appendChild(child);

    QFile file(filePath);
    if (!file.open(QIODevice::WriteOnly)) {
        qWarning() << "Failed to open file:" << file.errorString();
        return;
    }

    QTextStream stream(&file);
    doc.save(stream, 4); // Save with an indentation of 4 spaces
    file.close();
}

操作JSON字符串

1. 解析JSON字符串

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QDebug>

void parseJson(const QString &jsonString) {
    QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8());
    if (doc.isNull() || !doc.isObject()) {
        qWarning() << "Failed to parse JSON.";
        return;
    }

    QJsonObject obj = doc.object();
    qDebug() << "Object keys:" << obj.keys();
    qDebug() << "Value of 'key1':" << obj["key1"].toString();
}

2. 生成JSON字符串

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QDebug>

void createJson() {
    QJsonObject obj;
    obj["key1"] = "value1";
    obj["key2"] = 123;
    obj["key3"] = true;

    QJsonDocument doc(obj);
    QString jsonString = doc.toJson(QJsonDocument::Indented);
    qDebug() << "Generated JSON:" << jsonString;
}

总结

  • XML:
  • 使用 QDomDocument 来解析和创建XML文档。
  • 读取XML时,可以获取元素和属性。
  • 写入XML时,可以创建元素和设置属性,然后保存到文件。
  • JSON:
  • 使用 QJsonDocument 来解析和创建JSON文档。
  • 解析JSON时,可以访问对象的键值。
  • 生成JSON时,将对象转换为JSON字符串并打印或保存。

这些示例展示了如何在Qt中操作XML和JSON数据。根据你的需求,可以进一步定制这些操作。