2012-06-18 56 views
2

我試圖解析this XML的Python和XPath

我想所有的機制的列表,所以我想使用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可以解析?我是否需要添加新的標題或刪除標題或做其他事情?

+1

爲什麼不使用現有的XMPP庫? – Zash

+0

您鏈接到的XML缺少關閉''。您需要先解決發佈該XML的任何問題。 – millimoose

+0

@millimoose否,這對於XMPP服務器來說是完全正常的。 – Zash

回答

1

使用其中existing XMPP libraries

下一步:你不會成功地將XMPP視爲一個文檔。你可以繞過它幾天,讓自己相信你正在做某件事,然後你就會意識到無法知道服務器何時完成向你發送信息,所以沒有辦法知道何時打電話給你有什麼文件。

而是使用基於流的解析器。 SleekXMPP使用xml.etree.cElementTree.iterparse與插座周圍的包裝,使它聞起來像一個文件。可能還有其他方法,例如直接使用xml.parsers.expat