Я новичок в 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
?
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 и интерпретирует его.)
Вот как я создаю doc
:
QDomDocument doc;
doc.setContent(reply->readAll());
Обратите внимание, что reply
- это QNetworkReply*
, который отправляется обратно с QNetworkAccessManager
.
Однако, поскольку EVE API работает с XML, я выполняю много XML-анализа, очень похожего на этот, во многих местах моего приложения.
Большинство XML-файлов могут быть длиной в несколько сотен строк и могут содержать совершенно нерегулярные шаблоны данных, такие как , такие как этот .