gpt4 book ai didi

c++ - QXmlStreamReader : Put readNext() at the start or at the end of the loop?

转载 作者:行者123 更新时间:2023-11-28 04:48:50 27 4
gpt4 key购买 nike

用Qt的QXmlStreamReader读取Xml数据时:

readNext() 应该放在 while(!reader.atEnd()) 循环的开头还是结尾?我遇到过很多把它放在开头的例子,但也有很多把它放在最后。

QXmlStreamReader reader;
while(!reader.atEnd())
{
// <- Put reader.readNext() here?

QXmlStreamAttributes currentAttributes = reader.attributes();
// Do something with the attributes
// ...

// <- Or put reader.readNext() here?
}

我的直觉说它应该在循环的开始(呃...读取下一个 xml 标记,用新数据填充 attributes() 等)但我不是 100% 确定(由于相当一些将 readNext() 放在循环末尾的示例)。把它放在最后可能还会给我一个差一错误(最后一个 readNext() 的 atEnd() 变为真,最后一个标记未处理),对吗?

最佳答案

您需要了解类的工作原理以及每个函数的作用。作为演示,让我们考虑以下简单示例:

QXmlStreamReader reader("<info name=\"Foo\"/>");
while (!reader.atEnd()) {
//reader.readNext();
auto currentToken = reader.tokenType();
qDebug() << currentToken;
reader.readNext();
}

如果我们运行它并在每次迭代中打印出当前标记 (XML) 的值,我们将获得以下序列:

  • StartDocument、StartElement、EndElement、EndDocument(readNext() 调用在开头),
  • NoToken、StartDocument、StartElement、EndElement(readNext() 调用结束)

如您所见,如果 readNext() 位于循环的开头,您可以处理更多元素,包括文档的开始和结束元素。因此,在此类循环中尽早调用 QXmlStreamReader::readNext() 会更好。

关于c++ - QXmlStreamReader : Put readNext() at the start or at the end of the loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48625016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com