使用 libxml2 解析 XMPP 流

发布于 2024-11-03 04:11:58 字数 664 浏览 3 评论 0原文

我是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苯莒 2024-11-10 04:11:58

您可能需要使用 xmlCreatePushParserCtxtxmlParseChunk。更好的做法是选择现有的 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文