Russian Qt Forum
Ноябрь 23, 2024, 04:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Причина такого поведения QXmlStreamReader  (Прочитано 4350 раз)
gxoptg
Гость
« : Февраль 06, 2012, 20:32 »

Есть XML:
Код
XML
<?xml version="1.0" encoding="utf-8"?>
<response list="true">
<count>1</count>
<message>
 <mid>3094</mid>
 <date>1328546760</date>
 <out>0</out>
 <uid>nnnnnnnnnn</uid>
 <read_state>0</read_state>
 <title> ... </title>
 <body>test</body>
</message>
</response>
 
(из API Вконтакте; nnn заменяет номер)
Почему-то после чтения первых двух строк мы получаем reader.name() == 0. После еще одного reader.readNext() мы получаем count. Почему? Откуда берется пустой элемент?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Февраль 06, 2012, 22:46 »

Код покажи.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
gxoptg
Гость
« Ответ #2 : Февраль 07, 2012, 14:25 »

Код:
int API_VK::getUnreadMessages() {
        QXmlStreamReader reader(xmlData);
        reader.readNext();
        reader.readNext();
        if (reader.name() == "response") {
            if (reader.attributes().hasAttribute("list")) {
                if (reader.attributes().value("list").toString() == "true") {
                    reader.readNext();
                    reader.readNext(); // <--- дубликат
                    if (reader.name() == "count") {
                        return reader.readElementText().toInt();
                    }
                }
            }
            else return 0;
        }
        return -1;
    }
    return -1;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.059 секунд. Запросов: 23.