0

QXmlStreamWriterを使用してxmlファイルを生成します。ファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<pedestrianinfo>
    <pedestrian uuid="2112e2ed-fc9b-41e8-bbcb-b44ad78bde11">
        <module>11.1208</module>
        <direction>4</direction>
        <row>5</row>
        <column>71</column>
    </pedestrian>
    <pedestrian uuid="1aabb9c1-4aa7-4f47-9542-36d2dfaa26e4">
        <module>1.48032</module>
        <direction>4</direction>
        <row>67</row>
        <column>31</column>
    </pedestrian>

...

</pedestrianinfo>

次に、QDomDocumentでコンテンツを読み取ろうとします。私のコードは次のようになります。

xmlReader *xp = new xmlReader(QString("D:\\0T.xml"));
    if(xp->openFile()) {
        if(xp->isGetRootIndex()) {
            xp->parseRootIndexElement();
        }
        else
            cout<<"Unable to get root index."<<endl;
    }

isGetRootIndex()は次のとおりです。

bool xmlReader::isGetRootIndex()
{
    doc.setContent(&file,false);
    root = doc.documentElement();
    if(root.tagName() == getRootIndex()) //rootIndex=="pedestrianinfo"
        return true;
    return false;
}

これはparseRootIndexElement()です:

void xmlReader::parseRootIndexElement()
{
    QDomNode child = root.firstChild();
    while(!child.isNull()) {
        if(child.toElement().tagName() == getTagNameP())  //"childTagName=="pedestrian"
            parseEntryElement(child.toElement());
        qDebug()<<"module="<<module<<" direction="<<direction<<" row="<<row<<" column="<<column;
        child = child.nextSibling();
    }
}

parseEntryElement(const QDomElement&element)は、各タグの情報を取得し、モジュールなどの変数に保存する関数です。ただし、コードを実行するたびに、xmlファイルの最初の子のみがqDebug *ed*になります。child.nextSibling()を実行した後、子がnullになるようです。次の歩行者情報が得られないのはなぜですか?

4

1 に答える 1

0

ドキュメントに表示されている内容に基づいて、私には正しいように見えます。おそらく、parseEntryElementが予期せずイテレータを進めていますか?

于 2012-11-13T18:42:52.470 に答える