本地环境:
win10专业版,64位,Qt 5.12
代码已经测试通过。其他例子日后更新。
假设需要读写的xml文档结构如下图所示:
那么首先需要修改.pro
文件,增加一句:
然后执行qmake。
代码
cpp
#include <QtXml/QDomDocument>
#include <QFile>
// main中
// 写入XML文件
QDomDocument doc;
QDomElement root = doc.createElement("ArrayOfEnzymeInfo");
doc.appendChild(root);
for (int i = 0; i < 5; i++) {
QDomElement EnzymeInfo = doc.createElement("EnzymeInfo");
root.appendChild(EnzymeInfo);
QDomElement name = doc.createElement("name");
QDomText nameText = doc.createTextNode("name");
name.appendChild(nameText);
EnzymeInfo.appendChild(name);
QDomElement age = doc.createElement("age");
QDomText ageText = doc.createTextNode("30");
age.appendChild(ageText);
EnzymeInfo.appendChild(age);
}
QFile file("data.xml");
if (file.open(QIODevice::WriteOnly)) {
QTextStream stream(&file);
stream << doc.toString();
file.close();
qDebug() << "XML file written successfully.";
} else {
qDebug() << "Failed to write XML file.";
}
// 读取XML文件
QDomDocument readFile;
if (!readFile.setContent(&file)) {
qDebug() << "Failed to open XML file.";
return 1;
}
QDomElement readRoot = readFile.firstChildElement();
QDomNodeList EnzymeInfos = readRoot.elementsByTagName("EnzymeInfo");
for (int i = 0; i < EnzymeInfos.size(); i++) {
QDomElement EnzymeInfoNode = EnzymeInfos.at(i).toElement();
QString EnzymeInfoName = EnzymeInfoNode.elementsByTagName("name").at(0).toElement().text();
QString personAge = EnzymeInfoNode.elementsByTagName("age").at(0).toElement().text();
qDebug() << "EnzymeInfo " << i+1 << ": Name - " << EnzymeInfoName << ", Age - " << personAge;
}
/* 输出:
XML file written successfully.
EnzymeInfo 1 : Name - "name" , Age - "30"
EnzymeInfo 2 : Name - "name" , Age - "30"
EnzymeInfo 3 : Name - "name" , Age - "30"
EnzymeInfo 4 : Name - "name" , Age - "30"
EnzymeInfo 5 : Name - "name" , Age - "30"
*/
报错处理
undefined reference to `__imp__ZN12QDomDocumentC1Ev'
表示编译器找不到QDomDocument
类的默认构造函数的实现。
解决就是修改.pro
文件,增加QT += xml
Makefile error 3
如果添加了QT += xml
之后出现了Makefile error 3,可能是因为Qt的XML模块配置错误。一般还是上面的处理方法。其他可能的处理方案还有:
- 删除项目目录下的生成文件(如Makefile、.pro.user等)
- 检查项目文件.pro中的语法是否正确,确保QT += xml语句没有错误
- 打开Qt Creator的项目设置,检查项目配置是否正确,特别是构建选项和依赖项是否正确配置
- 重新运行qmake以更新项目文件
- 手动编辑Makefile添加所需的XML模块依赖项