首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用QXmlStreamReader解析Qt

用QXmlStreamReader解析Qt
EN

Stack Overflow用户
提问于 2016-10-09 17:56:09
回答 1查看 637关注 0票数 0

我对数据库中的记录进行了XML导出,并想要创建一个导入函数。

我的XML如下所示:

代码语言:javascript
复制
<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“之后停止。我在这里错过了什么?

这是我的代码:

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-09 21:34:15

我相信它只读取第一个块,因为读者会一直读到第一个元素的末尾。我建议将XML更改为以下格式:

代码语言:javascript
复制
<Groups>
  <Group1>
  </Group1>
  <Group2>
  </Group2>
</Groups>

然后,实现逻辑,在一个函数中处理不同的组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39946727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档