c语言编程笔录

首页 >   > 笔记大全

笔记大全

CQt分别读写xml文件的方法是什么

更新时间:2023-09-17

1. C++读写XML文件

C++中读取和写入XML文件的操作比较繁琐,需要使用第三方库。常用的有TinyXML、RapidXML等。

#include "tinyxml2.h"
#include <iostream>

using namespace std;
using namespace tinyxml2;

int main()
{
    // 写入XML文件
    XMLDocument doc;
    XMLDeclaration *dec = doc.NewDeclaration();
    doc.InsertFirstChild(dec);

    XMLElement *root = doc.NewElement("Root");
    doc.InsertEndChild(root);

    XMLElement *elem1 = doc.NewElement("Element1");
    elem1->SetText("Value1");
    root->InsertEndChild(elem1);

    XMLElement *elem2 = doc.NewElement("Element2");
    elem2->SetText("Value2");
    root->InsertEndChild(elem2);

    doc.SaveFile("test.xml");

    // 读取XML文件
    doc.LoadFile("test.xml");
    XMLElement *elm = doc.FirstChildElement("Root")->FirstChildElement("Element1");

    const char *text = elm->GetText();
    if (text != nullptr)
        cout << "Element1: " << text << endl;

    elm = doc.FirstChildElement("Root")->FirstChildElement("Element2");
    text = elm->GetText();
    if (text != nullptr)
        cout << "Element2: " << text << endl;
    
    return 0;
} 

2. Qt读写XML文件

在Qt中,可以使用QDomDocument、QXmlStreamReader和QXmlStreamWriter等类来读写XML文件。

#include <QtXml>
#include <iostream>
#include <QFile>

using namespace std;

int main(int argc, char *argv[])
{
    // 写入XML文件
    QFile file("test.xml");

    if (file.open(QIODevice::WriteOnly | QIODevice::Truncate))
    {
        QDomDocument doc;
        QDomElement root = doc.createElement("Root");
        doc.appendChild(root);

        QDomElement elem1 = doc.createElement("Element1");
        QDomText text1 = doc.createTextNode("Value1");
        elem1.appendChild(text1);
        root.appendChild(elem1);

        QDomElement elem2 = doc.createElement("Element2");
        QDomText text2 = doc.createTextNode("Value2");
        elem2.appendChild(text2);
        root.appendChild(elem2);

        QTextStream out(&file);
        doc.save(out, 4);
        file.close();
    }

    // 读取XML文件
    if (file.open(QIODevice::ReadOnly))
    {
        QDomDocument doc;
        if (doc.setContent(&file))
        {
            QDomElement root = doc.documentElement();
            QDomElement elem1 = root.firstChildElement("Element1");
            if (!elem1.isNull())
                cout << "Element1: " << elem1.text().toStdString() << endl;

            QDomElement elem2 = root.firstChildElement("Element2");
            if (!elem2.isNull())
                cout << "Element2: " << elem2.text().toStdString() << endl;
        }
        file.close();
    }

    return 0;
}

3. 代码解释

C++中使用TinyXML库,首先创建XMLDocument对象,然后创建XMLDeclaration和XMLElement对象,将它们插入到XMLDocument对象中,最后使用SaveFile函数将XMLDocument对象保存到文件中。读取XML文件时,使用LoadFile函数将XML文档解析成XMLDocument对象,然后使用FirstChildElement、NextSiblingElement和GetText等函数访问XML文件中的数据。

Qt中使用QDomDocument创建XMLDocument对象,然后使用createElement、createTextNode和appendChild等函数创建XMLElement对象,并将它们插入到XMLDocument中,最后使用QTextStream将XMLDocument对象保存到文件中。读取XML文件时,使用setContent函数将文件内容解析成QDomDocument对象,然后使用documentElement、firstChildElement、nextSiblingElement和text函数访问XML文件中的数据。

4. 总结

无论是使用C++还是Qt读写XML文件都需要使用第三方库或者内置库。C++中使用TinyXML和RapidXML库,Qt中可以使用QDomDocument、QXmlStreamReader和QXmlStreamWriter等类。在读取和写入XML文件时,我们需要创建XMLDocument对象或QDomDocument对象,并使用XMLElement对象或QDomElement对象来表示XML文件中的节点和数据,最后使用相应的函数将XMLDocument对象或QDomDocument对象保存到文件或从文件中读取出来。