парсинг потока XMPP с помощью libxml2 - PullRequest
0 голосов
/ 22 апреля 2011

Я новичок, когда дело доходит до libxml2, поэтому вот мой вопрос: я работаю на небольшом XMPP-клиенте.У меня есть поток, который я получаю из сети, полученный буфер подается в мой класс Parser, порция за порцией, по мере получения данных.Я могу получить неполные фрагменты данных XML:

<stream><presence from='user1@dom

и при следующем чтении из сокета я должен получить остаток:

ain.com to='hatter@wonderland.lit/'/>

В этом случае парсер должен сообщить об ошибке.

Меня интересуют только элементы с глубиной 0 и глубиной 1, например, поток и присутствие в моем примере выше.Мне нужно проанализировать этот вид потока и для каждого из этих элементов, глубина 0 или 1, создать xmlNodePtr (у меня есть классы, представляющие поток, элементы присутствия, которые принимают в качестве входных данных xmlNodePtr).Таким образом, это означает, что я должен иметь возможность создавать xmlNodePtr только из начального элемента, например, потому что связанный конечный элемент (в данном случае) принимается только после завершения связи.

Я хотел бы использовать pullparser.

Какие функции лучше всего использовать в этом случае?xmlReaderForIO, XmlReaderForMemory и т. д.?

Спасибо!

1 Ответ

1 голос
/ 22 апреля 2011

Возможно, вам нужен анализатор push, использующий xmlCreatePushParserCtxt и xmlParseChunk . Еще лучше было бы выбрать одну из существующих библиотек C с открытым исходным кодом для XMPP . Например, здесь - это код libstrophe , который делает то, что вы уже хотите.

...