使用libxml2解析XMPP流

parsing an XMPP stream with libxml2

本文关键字:XMPP 解析 libxml2 使用      更新时间:2023-10-16

我是libxml2的初学者,所以我的问题是:我在一个小型XMPP客户端工作。我有一个从网络接收的流,接收到的缓冲区在接收数据时被一块一块地馈送到我的Parser类中。我可能会收到不完整的XML数据片段:

<stream><presence from='user1@dom

,在下一次从套接字读取时,我应该得到剩余的:

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

在这种情况下,解析器应该报告一个错误。

我只对深度为0和深度为1的元素感兴趣,就像我上面的例子中的流和存在。我需要解析这种流,并为深度为0或1的每个元素创建一个xmlNodePtr(我有代表流的类,存在元素将其作为输入xmlNodePtr)。因此,这意味着我必须能够仅从开始元素创建xmlNodePtr,因为只有在通信完成时才接收相关的结束元素(在本例中)。

我想使用拉解析器。

在这种情况下最好使用什么函数?xmlReaderForIO, xmlreaderformmemory等?

您可能需要一个使用xmlcreatepushparserctext和xmlParseChunk的推送解析器。更好的选择是为XMPP选择一个现有的开源C库。例如,下面是libstrophe的代码,它已经完成了您想要的功能。