2

我正在尝试解析这个 XML

我想获取所有机制的列表,所以我尝试使用 XPATH(请建议是否有更简单的方法)来获取机制......

这是我的代码:

parseMessage = libxml2.parseDoc(doc)
xpathcon = parseMessage.xpathNewContext()

xpathcon.xpathRegisterNs('urn','http://etherx.jabber.org/streams')
nodes = xpathcon.xpathEval("//urn:text()")
print nodes

这是我得到的错误......

Entity: line 1: parser error : Premature end of data in tag stream line 1 
h"/><register xmlns="http://jabber.org/features/iq-register"/></stream:features>

我知道我的代码并没有删除所有机制,但首先我只想解决手头的问题。无论如何要把它变成可以解析的正确XML?我是否需要添加新标题或删除标题或做其他事情?

4

2 回答 2

1

看起来您正在尝试构建 XMPP 库。为什么不使用现有的库,例如SleekXMPP

如果您确实需要构建自己的 XMPP 库,则需要使用流解析器,例如Expat

于 2012-06-18T11:52:13.050 回答
0

使用现有的 XMPP 库之一。

下一步:您不会成功地将 XMPP 视为文档。您将能够破解它几天,让自己相信您正在做某事,然后您会意识到无法判断服务器何时完成向您发送信息,所以没有办法知道什么时候调用你有什么文件。

相反,使用基于流的解析器。 SleekXMPP使用xml.etree.cElementTree.iterparse和套接字周围的包装器,使其闻起来像文件。可能还有其他方法,例如直接使用xml.parsers.expat

于 2012-06-18T16:13:55.873 回答