Russian Qt Forum

Qt => XML => Тема начата: gxoptg от Февраль 06, 2012, 20:32



Название: Причина такого поведения QXmlStreamReader
Отправлено: 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. Почему? Откуда берется пустой элемент?


Название: Re: Причина такого поведения QXmlStreamReader
Отправлено: Пантер от Февраль 06, 2012, 22:46
Код покажи.


Название: Re: Причина такого поведения QXmlStreamReader
Отправлено: gxoptg от Февраль 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;
}