编程语言
首页 > 编程语言> > python – 解析类似XMPP的XML流的最佳方法?

python – 解析类似XMPP的XML流的最佳方法?

作者:互联网

我正在研究一种服务器应用程序,它通过TCP套接字以类似XMPP的XML格式接收数据,即< root>的每个子项. element本质上代表一个单独的请求(节). < / root>一旦关闭连接收到了.
我知道我必须以某种方式使用像SAX这样的流解析器.虽然为了方便起见,我更喜欢使用树状界面来访问每个节的子元素. (每个请求发送的数据都不大,所以我认为从整体上阅读每个节是有意义的.)

Python(最好是v3)中实现这一点的最佳方法是什么?

这是我想要构建它的代码.请随意指出一个完全不同的方向来解决这个问题.

import socketserver
import settings

class MyServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    pass

class MyRequestHandler(socketserver.StreamRequestHandler):
    def handle(self):
        pass

if __name__ == '__main__':
    server = MyServer((settings.host, settings.port), MyRequestHandler)
    server.serve_forever()

解决方法:

您将需要使用基于推送的解析器来发出SAX事件.基本上你需要一个解析器,你可以使用部分数据调用pushChunk(data),并为它生成一个生成你的节的第一级子结束标记事件的事件处理程序.然后可以将其发送到应用程序处理逻辑.

如果你想看一个这样的例子,这里是libstrophe的expat解析器,我写的XMPP客户端库:
http://github.com/metajack/libstrophe/blob/master/src/parser_expat.c

为每个节构建一个完整的文档非常昂贵.可以使用单个解析器实例实现此功能,而不是为每个节连续创建新的文档解析器.

如果你需要一个可用的Python版本,你可以使用或从Twisted Words中提取代码(twisted.words.xish,我相信).

标签:python,stream,xml,network-protocols,xmpp
来源: https://codeday.me/bug/20190701/1342883.html