在Python xml.dom中读取字符串而不进行解析
您可能知道,如果 xml 代码有任何问题,Python 的 xml.dom readString() 会引发异常。
我目前正在编写一个简单的 xmpp 聊天服务器,您可能也知道,第一个客户端请求消息之一不会关闭stream:stream 标记,直到它没有得到答复。
有没有办法使用 pythons xml.dom 而不“解析” xmlcode 或者我应该编写自己的 xml 解析器?
As you probably know, Pythons xml.dom readString() throws an exception, if there is anything wrong with the xml code.
I am currently writing a simple xmpp chat server, and as you probably also know, one of the first client request message does not close the stream:stream tag, until it does not get a reply.
Is there any way to use pythons xml.dom without "parsing" the xmlcode or should I write my own xml parser?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
DOM 解析器始终需要读取整个 XML 文件。您需要一个 SAX 解析器。
DOM parsers always need to read the entire XML file. You want a SAX parser.
您不使用像 xmpppy 这样的已经建立的 XMPP 库有什么原因吗? (另请参阅)
Any reason you're not using an already established XMPP library like xmpppy? (See also)
可能为您提供最佳体验的解析器是 xml.parsers.expat。在
StartElementHandler
中创建一个 DOM 元素,并将其作为子元素添加到当前元素,然后将当前元素设置为新元素。在EndElementHandler
中,将当前元素弹出到该元素的父元素。如果父级为null
,则您有一个节。仔细测试命名空间;第一次你可能会把属性搞错。The parser that is likely to give you the best experience is xml.parsers.expat. In your
StartElementHandler
create a DOM element, and add it to the current element as a child, then set the current element to the new element. In yourEndElementHandler
, pop the current element to that element's parent. If the parent wasnull
, you have a stanza. Do careful testing of namespaces; you're liable to get the attributes wrong the first time.