使用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令牌,用新数据填充attribute()等),但是我不确定100%(由于有很多例子)将readNext()放在循环的末尾)。将其放在最后可能还会给我一个错误的错误(最后一个readNext()的atEnd()变为true,最后一个标记未处理),对吗?
最佳答案
您需要了解类的工作方式以及每个函数的作用。作为演示,让我们考虑以下简单示例:
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()
在循环的开头,则可以处理更多元素,包括文档的begin和end元素。因此,在此类循环中尽早调用QXmlStreamReader::readNext()
会更好。关于c++ - QXmlStreamReader:将readNext()放在循环的开始还是结尾?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48625016/