Как мне использовать foreach с QDomNodeList в Qt?
Я новичок в Qt и каждый день узнаю что-то новое.
В настоящее время я разрабатываю небольшое приложение для своего Nokia 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);
Где акк имеет типEveAccount
, который хранит данные вQList<EveCharacter>
.
Символы в верхнем регистре являются константами времени компиляции.
(Я создаю клиент для EVE Online API. Это из метода, который получаетсимволы учетной записи XML и интерпретирует это.)
Это как я создаюdoc
:
QDomDocument doc;
doc.setContent(reply->readAll());
Обратите внимание, чтоreply
этоQNetworkReply*
который отправляется обратно изQNetworkAccessManager
.
Тем не менее, так как EVE API работает с XML, я выполняю много синтаксического анализа XML, очень похожего на это, во многих местах моего приложения.
Большинство XML-файлов могут быть длиной в несколько сотен строк и могут содержать довольно нестандартные шаблоны данных,такой как этот.