QXmlStreamReader возвращает только один элемент

Это 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 только печатает:
текст: «альфа бета»

Почему он возвращает только одно значение и как я могу это исправить?

BR

1

Решение

Как правильно заметил Фрэнк в комментарии, допустимый XML-документ может иметь только один корневой элемент. Как только вы исправите содержимое файла данных, оно будет работать, но я все равно предоставляю весь контент, который использовал во время тестирования на моей машине.

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"
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]