我是 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
}
由于某种原因,上面的代码甚至无法编译。我从编译器收到神秘的错误消息。
有人可以向我解释一下如何正确处理吗?
If the foreach
循环不支持QDomNodeList
,有没有办法处理支持的 XML 文件foreach
?
EDIT:
澄清,// 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 http://wiki.eve-id.net/APIv2_Account_Characters_XML并解释它。)
这就是我的创作方式doc
:
QDomDocument doc;
doc.setContent(reply->readAll());
注意reply
is a QNetworkReply*
这是从a发回的QNetworkAccessManager
.
然而,由于 EVE API 使用 XML,因此我在应用程序的许多地方进行了大量与此非常相似的 XML 解析。
大多数 XML 可能有数百行长,并且可能包含非常不规则的数据模式,比如这个 http://wiki.eve-id.net/APIv2_Char_CharacterSheet_XML.