1

これはxmlファイルです:

<?xml version="1.0" encoding="UTF-8"?>
<Text>alpha beta</Text>
<Text>beta gamma</Text>
<Text>gamma delta</Text>
<Text>delta epsilon</Text>
<Text>epsilon golf</Text>

そして、これは私の読者です:

QXmlStreamReader inputStream(&dataFile);
        while (!inputStream.atEnd() && !inputStream.hasError())
        {
            inputStream.readNext();
            if (inputStream.isStartElement())
            {
                QString name = inputStream.name().toString();
                if (name == "Text")
                {
                    qDebug()   << "text:" << inputStream.readElementText();
                }
            }
        }

そして、私の qDebug のみが出力されます: text: "alpha beta"

値が 1 つしか返されないのはなぜですか?どうすればこれを修正できますか?

ブラジル

4

1 に答える 1

0

Frank がコメントで正しく指摘したように、有効な XML ドキュメントはルート要素を 1 つしか持つことができません。データ ファイルの内容を修正すれば機能しますが、とにかく、私のマシンでのテスト中に使用したすべての内容を提供します。

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<TextList>
<Text>alpha beta</Text>
<Text>beta gamma</Text>
<Text>gamma delta</Text>
<Text>delta epsilon</Text>
<Text>epsilon golf</Text>
</TextList>

main.cpp

#include <QXmlStreamReader>
#include <QDebug>
#include <QString>
#include <QFile>

int main()
{
    QFile file("test.xml");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << "File open error:" << file.errorString();
        return 1;
    }
    QXmlStreamReader inputStream(&file);
    while (!inputStream.atEnd() && !inputStream.hasError())
    {
        inputStream.readNext();
        if (inputStream.isStartElement())
        {
            QString name = inputStream.name().toString();
            if (name == "Text")
            {
                qDebug()   << "text:" << inputStream.readElementText();
            }
        }
    }
    return 0;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

ビルドして実行

qmake && make && ./main

出力

text: "alpha beta" 
text: "beta gamma" 
text: "gamma delta" 
text: "delta epsilon" 
text: "epsilon golf"
于 2014-01-07T21:23:50.673 に答える