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ライブラリの1つを使用してください

次へ:XMPPがそれをドキュメントのように考えると成功することはありません。数日間それをハックして、自分が何かに取り組んでいると自分自身に信じ込ませることができます。そうすると、サーバーが情報の送信を完了したことを知る方法がないことに気付くでしょう。そのため、方法はありません。あなたが文書を持っているものをいつ呼び出すべきかを知るために。

代わりに、ストリームベースのパーサーを使用してください。 SleekXMPPは、 xml.etree.cElementTree.iterparseとソケットのラッパーを使用して、ファイルのような匂いを作ります。xml.parsers.expatを直接使用するなど、他の方法も考えられます。

于 2012-06-18T16:13:55.873 に答える