我对数据库中的记录进行了XML导出,并想要创建一个导入函数。
我的XML如下所示:
<Group1>
<Group1Element>
<ID>1</ID>
<Name>First</Name>
</Group1Element>
<Group1Element>
<ID>2</ID>
<Name>Second</Name>
</Group1Element>
</Group1>
<Group2>
<Group2Element>
<ID>1</ID>
<Nickname>fir</Nickname>
<Name>First Name</Name>
</Group2Element>
<Group2Element>
<ID>2</ID>
<Nickname>sec</Nickname>
<Name>Second Name</Name>
</Group2Element>
</Group2>Group1是我数据库中的一个表,Group2是另一个表。我有两种方法从XML文件读取两个表记录,但不管我做什么,只导入XML中的第一个组。如果Group1是第一个,那么是导入的,如果Group2是文件中的第一个,那么它就是导入的。当第二个组的read方法运行时(在本例中是readGroup2()),第一个while循环只运行三次,并在"Group1 -> Group1Element -> ID“之后停止。我在这里错过了什么?
这是我的代码:
void Import::readGroup1(QString filepath)
{
QFile file(filepath)
file.open(QIODevice::ReadOnly);
QXmlStreamReader stream(&file);
while(stream.readNextStartElement() && !stream.isEndDocument())
{
if(stream.name() == "Group1Element")
{
qDebug() << " ";
while(stream.readNext() && !stream.isEndElement())
{
if(stream.name() == "ID" || stream.name() == "Name")
{
qDebug() << stream.readElementText();
}
}
}
}
file.close();
}
void Import::readGroup2(QString filepath)
{
QFile file(filepath)
file.open(QIODevice::ReadOnly);
QXmlStreamReader stream(&file);
while(stream.readNextStartElement() && !stream.isEndDocument())
{
if(stream.name() == "Group2Element")
{
qDebug() << " ";
while(stream.readNext() && !stream.isEndElement())
{
if(stream.name() == "ID" ||
stream.name() == "Nickname" ||
stream.name() == "Name")
{
qDebug() << stream.readElementText();
}
}
}
}
file.close();
}发布于 2016-10-09 21:34:15
我相信它只读取第一个块,因为读者会一直读到第一个元素的末尾。我建议将XML更改为以下格式:
<Groups>
<Group1>
</Group1>
<Group2>
</Group2>
</Groups>然后,实现逻辑,在一个函数中处理不同的组。
https://stackoverflow.com/questions/39946727
复制相似问题