gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:09:37 25 4
gpt4 key购买 nike

我正在开发一个服务器应用程序,它以类似 XMPP 的 XML 格式通过 TCP 套接字接收数据,即 <root> 的每个子级元素本质上代表一个单独的请求(节)。 </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 - 解析类似 XMPP 的 XML 流的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2741642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com