12

私はQtに不慣れで、毎日何か新しいことを学んでいます。
現在、空き時間にNokiaN900用の小さなアプリケーションを開発しています。
すべてが順調です。デバイス上でMaemoアプリケーションをコンパイルして実行できます。

foreachQtのキーワードについて学びました。(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);

ここで、accはタイプEveAccountであり、データをに格納しますQList<EveCharacter>

大文字の記号は、コンパイル時の定数文字列です。
(私はEVE Online APIのクライアントを作成しています。これは、アカウント文字XMLを受け取り、それを解釈するメソッドからのものです。)

これが私が作成する方法ですdoc

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

から返送されるreplyことに注意してください。QNetworkReply*QNetworkAccessManager

ただし、EVE APIはXMLで動作するため、アプリケーションの多くの場所でこれと非常によく似たXML解析を多数実行します。ほとんどのXMLは数百行の長さであり、このような
非常に不規則なデータパターンを含む可能性があります。

4

2 に答える 2

9

foreachコンテナクラスのみをサポートしているため、。と一緒に使用することはできませんQDomNodeList

実際の目標はわかりませんが、XMLを処理する最も簡単な方法はとですQXmlSimpleReaderQXmlStreamReader

質問の編集に一致するように編集します。

あなたがやろうとしていることは、XPathまたはXQueryの最有力候補のように見えます。モジュールを見てくださいQtXmlPatterns。これにより、他のすべてのノードをループすることなく、一連の文字ノードが得られます。

于 2010-05-26T16:15:14.723 に答える
2

foreachQtGenericContainersで動作します。QDomNodeListは何からも継承しているようには見えないため、を使用することはできませんforeach

ノードリストを繰り返し処理して、ノードを?に挿入できますQList<QDomElement>か?

于 2010-05-26T16:06:00.750 に答える