【问题标题】:Python and XPathPython 和 XPath
【发布时间】:2012-06-20 00:24:30
【问题描述】:

我正在尝试解析this 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?我是否需要添加新标题或删除标题或做其他事情?

【问题讨论】:

  • 为什么不使用现有的 XMPP 库?
  • 您链接到的 XML 缺少结束 &lt;/stream:stream&gt;。您需要先修复任何发出该 XML 的问题。
  • @millimoose 不,这对于 XMPP 服务器来说是完全正常的。
  • 我可以只添加“”吗?
  • @Zash 哦,XMPP 不能通过流式传输格式良好的文档来工作?奇怪的。那是我的错。

标签: python xml xpath xmpp


【解决方案1】:

您似乎正在尝试构建 XMPP 库。为什么不用an existing library,比如SleekXMPP

如果您真的需要构建自己的 XMPP 库,则需要使用 a streaming parser,例如 Expat

【讨论】:

    【解决方案2】:

    使用existing XMPP libraries之一。

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-19
      • 2017-03-29
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      相关资源
      最近更新 更多