我是 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 是 type EveAccount
,它将数据存储在QList<EveCharacter>
.
大写符号是编译时常量字符串。
(我正在为 EVE Online API 创建一个客户端。这是来自接收帐户字符 XML并对其进行解释的方法。)
这就是我创建的方式doc
:
QDomDocument doc;
doc.setContent(reply->readAll());
请注意,这reply
是QNetworkReply*
从 a 发回的 a QNetworkAccessManager
。
然而,由于 EVE API 与 XML 一起工作,我在我的应用程序的许多地方都做了很多与此非常相似的 XML 解析。
大多数 XML 可能长达数百行,并且可能包含非常不规则的数据模式,例如这个.