CQt分别读写xml文件的方法是什么
更新时间:2023-09-171. 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对象保存到文件或从文件中读取出来。