qt读取xml到结构体
时间: 2023-12-28 22:05:46 浏览: 121
QT QTreewidget显示和修改xml文件并导出
可以使用Qt自带的QXmlStreamReader类来读取XML文件,并将读取的数据存储到结构体中。
以下是一个示例代码:
```cpp
#include <QtXml/QXmlStreamReader>
#include <QDebug>
struct Person {
QString name;
int age;
};
void readPerson(QXmlStreamReader& xml, Person& person)
{
while (!xml.atEnd() && !xml.hasError()) {
QXmlStreamReader::TokenType token = xml.readNext();
if (token == QXmlStreamReader::StartElement) {
if (xml.name() == "name") {
person.name = xml.readElementText();
} else if (xml.name() == "age") {
person.age = xml.readElementText().toInt();
}
} else if (token == QXmlStreamReader::EndElement && xml.name() == "person") {
break;
}
}
}
int main(int argc, char *argv[])
{
QFile file("person.xml");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "Failed to open file";
return -1;
}
QXmlStreamReader xml(&file);
QList<Person> persons;
while (!xml.atEnd() && !xml.hasError()) {
if (xml.readNextStartElement() && xml.name() == "person") {
Person person;
readPerson(xml, person);
persons.append(person);
}
}
if (xml.hasError()) {
qDebug() << "Failed to parse XML";
return -1;
}
for (const auto& person : persons) {
qDebug() << person.name << person.age;
}
return 0;
}
```
假设我们要读取以下格式的XML文件:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<people>
<person>
<name>John</name>
<age>30</age>
</person>
<person>
<name>Jane</name>
<age>25</age>
</person>
</people>
```
运行以上代码,输出结果为:
```
"John" 30
"Jane" 25
```
其中,readPerson函数用于读取一个person节点的数据,并将其存储到Person结构体中。主函数则使用QList<Person>来存储所有读取到的person节点数据。
阅读全文