Задать вопрос

Как распарсить xml с помощью QXmlStreamReader на Qt?

Есть такой xml-файл такой структуры:

<?xml version="1.0" encoding="windows-1251"?>
<FileIndex>
    <Name>lol.xml</Name>
    <Size>0</Size>
    <Path>E:/test/build-untitled-Desktop_Qt_5_4_1_MinGW_32bit-Release/lol.xml</Path>
    <Created>Сб мар 14 21:55:37 2015</Created>
    <Name>Makefile</Name>
    <Size>20399</Size>
    <Path>E:/test/build-untitled-Desktop_Qt_5_4_1_MinGW_32bit-Release/Makefile</Path>
    <Created>Чт мар 12 19:00:45 2015</Created>
</FileIndex>


Есть имя файла. Если такой файл есть в списке, то нужно вывести путь к нему.
То бишь если встречается тег Name, то нужно заглянуть в него и сверить текст с имеющимся. Если текст совпал, перейти к ближайшему тегу Path, вытащить путь себе в переменную и выйти из цикла.

Начал я с меньшего и просто пытаюсь вывести имена всех файлов:
while(!xmlReader.atEnd())
    {
        QXmlStreamReader::TokenType token = xmlReader.readNext();
        if(token == QXmlStreamReader::StartElement) {
            if(xmlReader.name() == "Name") {
                xmlReader.readNext();
                ui->textBrowser->setText(xmlReader.text().toString());
            }
        }
    }


Но в текстовое поле попадет имя только одного файла(последнего), а должны все. Что я делаю не так?
  • Вопрос задан
  • 2753 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
@torwig
C++/Qt
Смею предположить, что выводятся все, но очень быстро и в конце остается только один, последний ,который Вы и видите. Вот эта строка ui->textBrowser->setText(xmlReader.text().toString()); затирает предыдущее значение и вставляет новое. Используйте append() метод и тогда появятся все.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы