我在数据库中对记录进行了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是文件中的第一个,那么导入。 当第二组读取方法运行时(在本例中为readGroup2()),第一个while循环仅运行三次并在&#34; Group1 - &gt;之后停止。 Group1Element - &gt; ID&#34 ;. 我在这里缺少什么?
这是我的代码:
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();
}
答案 0 :(得分:1)
我相信它只会读取第一个块,因为读取器将一直读到第一个元素的末尾。我建议将XML更改为以下格式:
<Groups>
<Group1>
</Group1>
<Group2>
</Group2>
</Groups>
然后,实现逻辑以在一个函数中处理不同的组。