Получение «не правильно сформированного (недействительный токен)» ошибка из библиотеки экспатов

Я пытаюсь проанализировать некоторые XMPP с библиотекой экспатов. У меня есть входной файл, как:

<iq from='ya.ru' to='foo@ya.ru/Foo1256' id='ping_1' type='get'><ping xmlns='urn:xmpp:ping'/></iq>

Но каждый раз, когда я использую ошибку «неправильно сформирован (неверный токен)» XML_Parse(), Я обнаружил, что ошибка возникает, когда expat пытается проанализировать «from = ….» или другой атрибут тега «iq». Например, эта строка анализируется без ошибок:

<iq><ping xmlns='urn:xmpp:ping'/></iq>

Зачем?

Парсер создан с XML_ParserCreateNS(NULL, '|');,

Это функция синтаксического анализа:

bool CSessionTreeItem::setXMLForParser(char *buf, int Len, AnsiString &Error)
{
bool error = false;
for(int i = 0; i < Len; i ++)
{
if(i + 5 < Len)
{
if(memcmp(buf + i, "<?xml", 5) == 0)
{
XML_ParserReset(parser, NULL);
InitHandlers();
}
}
if (!XML_Parse (parser, buf + i, 1, 0))
{
Error = AnsiString(XML_ErrorString (XML_GetErrorCode (parser)));
error = true;
break;
}
if(endCompressTag)
{
endCompressTag = false;
if(i + 1 < Len)
{
if(write(buf + i + 1, Len - (i + 2), Error) != 0)
{
error = true;
break;
}
}
break;
}
}
return (!error);
}
  • C ++ Builder 6
  • Expat 2.0.1

0

Решение

В моем случае с помощью Expat 2.1.0 решил проблему.

0

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


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector