Frage

Ich bin neu in Qt und ich lerne jeden Tag etwas Neues.
Derzeit entwickle ich eine kleine Anwendung für mein Nokia N900 in meiner Freizeit.
Alles ist in Ordnung, ich bin in der Lage zu kompilieren und Maemo Anwendungen auf dem Gerät ausgeführt werden.

Ich habe gerade über das foreach Schlüsselwort in Qt gelernt. (Ich weiß es nicht in C ++, so dass ich nicht darüber nachdenken, bis ich auf einem Qt-doc zufällig gestolpert, die es erwähnt.)
Also entschied ich mich sehr ärgerlich und nicht lesbar Schleifen foreach zu ändern, aber ich nicht mit diesem:

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
}

Dies ist, wie ich versuchte:

foreach (QDomElement node, doc.lastChild().childNodes().at(1).firstChild().childNodes())
{
    // Do something with node
}

Aus irgendeinem Grund der obige Code nicht einmal kompilieren. Ich erhalte kryptische Fehlermeldungen vom Compiler.

Könnte jemand mir bitte erklären, wie man es richtig machen?

Wenn die foreach Schleife nicht QDomNodeList nicht unterstützt, ist es eine Möglichkeit, handelten XML-Dateien, die foreach unterstützt?

EDIT:

Um zu klären, // Do something with node ist folgende in diesem Fall:

EveCharacter chr;
chr.setName(node.attribute(EVE_NAME));
chr.setId(node.attribute(EVE_CHARACTER_ID).toInt());
acc->addCharacter(chr);

Dabei gilt nach Typ EveAccount ist, die speichert Daten in einer QList<EveCharacter>.

Die Groß Symbole sind Kompilierung-Konstante Strings.
(Ich bin ein Client für das EVE Online API zu schaffen. Dies ist von der Methode, die das Konto XML-Zeichen und interpretiert sie.)

Dies ist, wie ich schaffen doc:

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

Beachten Sie, dass reply ist ein QNetworkReply*, die zurück von einem QNetworkAccessManager gesendet wird.

Da jedoch die EVE API mit XML arbeitet, habe ich eine Menge von XML in vielen Orten in meiner Anwendung dieser sehr ähnlich Parsen.
Die meisten der XMLs können mehrere hundert Zeilen lang sein und ganz unregelmäßiges Datenmuster enthalten, wie diese .

War es hilfreich?

Lösung

foreach unterstützt nur die Containerklassen , so dass man es nicht mit einem QDomNodeList .

Ich bin nicht sicher von Ihnen eigentliches Ziel, aber ich finde die QXmlSimpleReader und QXmlStreamReader der einfachste Weg, um mit XML umgehen.

Bearbeiten Frage bearbeiten entsprechen:

Was Sie versuchen, sieht aus wie ein Hauptkandidat für XPath oder XQuery zu tun. Werfen Sie einen Blick auf die QtXmlPatterns Modul dies wird Ihnen eine Reihe von Zeichen Knoten ohne mit einer Schleife durch alle anderen Knoten.

Andere Tipps

foreach Arbeiten mit Allgemeinen Qt-Containern . Es sieht nicht wie QDomNodeList erbt von etwas, so dass Sie nicht verwenden können foreach .

Könnten Sie eine Iteration durch die Knotenliste und fügen Sie den Knoten in einen QList<QDomElement>?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top