如何在Qt中使用带有QDomNodeList的foreach?

Ven*_*emo 11 c++ foreach qt qt4 qt-maemo

我是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
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试的方式:

foreach (QDomElement node, doc.lastChild().childNodes().at(1).firstChild().childNodes())
{
    // Do something with node
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,上面的代码甚至没有编译.我从编译器得到了神秘的错误消息.

有人可以向我解释如何把它弄好吗?

如果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);
Run Code Online (Sandbox Code Playgroud)

其中acc是type EveAccount,它将数据存储在a中QList<EveCharacter>.

大写符号是编译时常量字符串.
(我正在为EVE Online API创建一个客户端.这来自接收帐户字符XML并解释它的方法.)

这就是我创建的方式doc:

QDomDocument doc;
doc.setContent(reply->readAll());
Run Code Online (Sandbox Code Playgroud)

请注意,reply是一个QNetworkReply*被发送从后面QNetworkAccessManager.

但是,由于EVE API与XML一起工作,我在我的应用程序的许多地方做了很多非常类似的XML解析.
大多数XML可以长达几百行,并且可以包含非常规的数据模式,例如这个.

Ada*_*m W 8

foreach只支持容器类,所以你不能使用它QDomNodeList.

我不确定你的实际目标,但我发现QXmlSimpleReader并且QXmlStreamReader是最简单的处理XML的方法.

编辑以匹配问题编辑:

你想要做的事情看起来像XPath或XQuery的主要候选人.看一下这个QtXmlPatterns模块,它将为您提供一组字符节点,而无需遍历所有其他节点.