qt读取xml反序列化
时间: 2023-07-09 13:23:22 浏览: 270
Qt读取xml中的数据
3星 · 编辑精心推荐
在Qt中,可以使用QXmlStreamReader类来读取XML文件,然后将XML数据反序列化为对象。
以下是一个简单的示例代码,演示如何使用QXmlStreamReader读取XML文件,并将XML数据反序列化为一个Person对象:
```c++
#include <QFile>
#include <QXmlStreamReader>
#include <QXmlStreamAttributes>
#include <QDebug>
class Person
{
public:
QString name;
int age;
// 反序列化函数
bool fromXml(QXmlStreamReader& reader)
{
while (!reader.atEnd()) {
QXmlStreamReader::TokenType token = reader.readNext();
if (token == QXmlStreamReader::StartElement) {
QStringRef name = reader.name();
if (name == "name") {
name = reader.readElementText();
this->name = name.toString();
} else if (name == "age") {
QStringRef ageStr = reader.readElementText();
bool ok;
int age = ageStr.toInt(&ok);
if (!ok) {
return false;
}
this->age = age;
}
} else if (token == QXmlStreamReader::EndElement) {
QStringRef name = reader.name();
if (name == "person") {
return true;
}
}
}
return false;
}
};
int main()
{
// 打开XML文件
QFile file("example.xml");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qCritical() << "Failed to open file!";
return -1;
}
// 创建XML读取器
QXmlStreamReader reader(&file);
// 反序列化Person对象
Person person;
if (!person.fromXml(reader)) {
qCritical() << "Failed to parse XML file!";
return -1;
}
// 输出Person对象的属性
qDebug() << "Name: " << person.name;
qDebug() << "Age: " << person.age;
// 关闭文件和XML读取器
file.close();
reader.clear();
return 0;
}
```
这个示例代码会读取名为“example.xml”的XML文件,并将XML数据反序列化为一个Person对象。如果XML文件格式不正确,程序会输出错误信息。
阅读全文