Как я использую foreach с QDomNodeList в QT?

Я плохо знаком с QT, и я изучаю что-то новое каждый день.
В настоящее время я разрабатываю небольшое приложение для своего Nokia N900 в мое свободное время.
Все прекрасно, я могу скомпилировать и запустить приложения Maemo на устройстве.

Я только что узнал о foreach ключевое слово в QT (Я знаю это, не находится в C++, таким образом, я не думал об этом, пока я случайно не наткнулся на спокойный документ, который упомянул это.)
Так, я решил изменить свои довольно раздражающие и нечитабельные циклы на 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 имеет тип EveAccount, который хранит данные в a QList.

Символы верхнего регистра являются постоянными строками времени компиляции.
(Я создаю клиент в течение КАНУНА API Онлайн. Это из метода, который получает символы XML учетной записи и интерпретирует его.)

Это - то, как я создаю doc:

QDomDocument doc;
doc.setContent(reply->readAll());

Отметьте это reply a QNetworkReply* который передают обратно от a QNetworkAccessManager.

Однако как КАНУН API работает с XML, я делаю большой парсинг XML очень похожего на это во многих местах в моем приложении.
Большинство XMLs может быть несколькими сотнями строк долго и может содержать довольно нерегулярные шаблоны данных, такие как этот.

11
задан Venemo 27 May 2010 в 13:36
поделиться

2 ответа

foreach поддерживает только контейнерные классы, поэтому вы не можете использовать его с QDomNodeList.

Я не уверен в вашей цели, но я считаю QXmlSimpleReader и QXmlStreamReader самым простым способом работы с XML.

Редактировать для соответствия редактированию вопроса:

То, что вы пытаетесь сделать, похоже, является главным кандидатом для XPath или XQuery. Посмотрите на модуль QtXmlPatterns Он даст вам набор символьных узлов без необходимости перебирать все остальные узлы.

8
ответ дан 3 December 2019 в 10:03
поделиться

foreach работает с универсальными контейнерами Qt . Не похоже, что QDomNodeList наследуется от чего-либо, поэтому вы не можете использовать foreach .

Не могли бы вы перебрать список узлов и вставить их в QList ?

2
ответ дан 3 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: