用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/