使用 libxml2 解析 XMPP 流
我是 libxml2 的初学者,所以这是我的问题: 我正在一个小型 XMPP 客户端工作。我有一个从网络接收的流,当接收到数据时,接收到的缓冲区被逐块地输入到我的 Parser 类中。我可能会收到不完整的 XML 数据片段:
,下次从套接字读取时,我应该得到其余的:
ain.com to= '[电子邮件受保护]/'/>
解析器在这种情况下应该报告错误。
我只对深度为 0 和深度 1 的元素感兴趣,例如上面示例中的流和存在。我需要解析这种流,并为每个深度为 0 或 1 的元素创建一个 xmlNodePtr (我有表示流的类、将 xmlNodePtr 作为输入的存在元素)。因此,这意味着我必须能够仅从像这样的开始元素创建 xmlNodePtr,因为只有在通信完成时才会收到关联的结束元素(在本例中)。
我想使用拉解析器。
在这种情况下最好使用哪些功能? xmlReaderForIO、XmlReaderForMemory 等?
谢谢 !
I'm a beginner when it comes to libxml2, so here is my question:
I'm working at a small XMPP client. I have a stream that I receive from the network, the received buffer is fed into my Parser class, chunk by chunk, as the data is received. I may receive incomplete fragments of XML data:
<stream><presence from='user1@dom
and at the next read from socket I should get the rest:
ain.com to='[email protected]/'/>
The parser should report an error in this case.
I'm only interested in elements having depth 0 and depth 1, like stream and presence in my example above. I need to parse this kind of stream and for each of this elements, depth 0 or 1, create a xmlNodePtr (I have classes representing stream, presence elements that take as input a xmlNodePtr). So this means I must be able to create an xmlNodePtr from only an start element like , because the associated end element( in this case) is received only when the communication is finished.
I would like to use a pull parser.
What are the best functions to use in this case ? xmlReaderForIO, XmlReaderForMemory etc ?
Thank you !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可能需要使用 xmlCreatePushParserCtxt 和 xmlParseChunk。更好的做法是选择现有的 XMPP 开源 C 库之一。例如,这里是来自libstropice 已经可以满足您的需求了。
You probably want a push parser using xmlCreatePushParserCtxt and xmlParseChunk. Even better would be to choose one of the existing open source C libraries for XMPP. For example, here is the code from libstrophe that does what you want already.