我是Qt的新手,我每天都在学习新东西。
目前,我正在空闲时间为我的诺基亚N900开发一个小应用程序。
一切都很好,我能够在设备上编译和运行Maemo应用程序。
我刚学会了这个 foreach
Qt中的关键字(我知道它不是用C ++编写的,所以直到我偶然发现一个提到它的Qt文档时我才考虑它。)
所以,我决定将我那令人烦恼且难以理解的循环改为foreach,但我对此失败了:
QDomNodeList list = doc.lastChild().childNodes().at(1).firstChild().childNodes();
for (int x = 0; x < list.count(); x++)
{
QDomElement node = list.at(x).toElement();
// Do something with node
}
这是我尝试的方式:
foreach (QDomElement node, doc.lastChild().childNodes().at(1).firstChild().childNodes())
{
// Do something with node
}
由于某种原因,上面的代码甚至没有编译。我从编译器得到了神秘的错误消息。
有人可以向我解释如何正确吗?
如果 foreach
循环不支持 QDomNodeList
,有没有办法处理支持的XML文件 foreach
?
编辑:
澄清, // Do something with node
在这种情况下是以下内容:
EveCharacter chr;
chr.setName(node.attribute(EVE_NAME));
chr.setId(node.attribute(EVE_CHARACTER_ID).toInt());
acc->addCharacter(chr);
acc是类型的 EveAccount
,将数据存储在 QList<EveCharacter>
。
大写符号是编译时常量字符串。
(我正在为EVE Online API创建一个客户端。这来自接收的方法 帐户字符XML 并解释它。)
这就是我创造的方式 doc
:
QDomDocument doc;
doc.setContent(reply->readAll());
注意 reply
是一个 QNetworkReply*
这是从一个发回来的 QNetworkAccessManager
。
但是,由于EVE API与XML一起工作,我在我的应用程序的许多地方做了很多非常类似的XML解析。
大多数XML可以长达数百行,并且可以包含非常规的数据模式, 比如这个。