【问题标题】:Parsing XML Pastebin response, in Python在 Python 中解析 XML Pastebin 响应
【发布时间】:2015-12-12 15:18:18
【问题描述】:

我正在尝试通过他们的 API 在 Pastebin 上搜索一些东西。我正在使用 python 的 pastebin 库进行搜索。

问题是我收到了一个包含重复键的 XML 响应。

这是回复

<paste>
<paste_key>fadsda</paste_key>
<paste_date>1409074286</paste_date>
<paste_title>badPaste</paste_title>
<paste_size>2040</paste_size>
<paste_expire_date>0</paste_expire_date>
<paste_private>0</paste_private>
<paste_format_long>Bash</paste_format_long>
<paste_format_short>bash</paste_format_short>
<paste_url>http://pastebin.com/url2</paste_url>
<paste_hits>211</paste_hits>
</paste>
<paste>
<paste_key>fsfgdsgg</paste_key>
<paste_date>1398409838</paste_date>
<paste_title>goodPaste</paste_title>
<paste_size>2407</paste_size>
<paste_expire_date>0</paste_expire_date>
<paste_private>2</paste_private>
<paste_format_long>Bash</paste_format_long>
<paste_format_short>bash</paste_format_short>
<paste_url>http://pastebin.com/otherURL</paste_url>
<paste_hits>54</paste_hits>
</paste>

所以我试图解析它以在paste_title == goodPaste 时返回paste_key,但属性始终为空

def parseXML(response):
    #I'm adding a root tag
    xml = ElementTree.fromstring('<list>' + response + '</list>')
    for child in root:
            for elem in child:
                print elem.tag, elem.attrib

返回

    paste_key {}
    paste_date {}
    paste_title {}
    paste_size {}
    paste_expire_date {}
    paste_private {}
    paste_format_long {}
    paste_format_short {}
    paste_url {}
    paste_hits {}
    paste_key {}
    paste_date {}
    paste_title {}
    paste_size {}
    paste_expire_date {}
    paste_private {}
    paste_format_long {}
    paste_format_short {}
    paste_url {}
    paste_hits {}

编辑: 所以我应该使用 elem.text,所以现在可以使用,但主要问题仍然存在: paste_title == goodPaste时如何返回paste_key所在的元素

编辑 2 中奖彩票:

result = xml.findall(".//paste[paste_title='goodPaste']/paste_key")
print result[0].text

【问题讨论】:

  • 那是因为您所显示的内容没有属性,只有标签数据。您访问它的方式是说.text 而不是.attrib
  • @JavierBuzzi 你是个天才!谢谢你!我误解了 ElementTree 文档。再次感谢您!
  • Np。如果你迷路了,这里是文档。 docs.python.org/2/library/…
  • @JavierBuzzi 作为答案发布,因此他可以关闭问题。
  • @AliNikneshan 请检查帖子,这不是答案。

标签: python xml pastebin


【解决方案1】:

您可以为此使用 XPath:

result = xml.findall(".//paste[paste_title='goodPaste']/paste_key")
print result.text

在你的情况下应该打印fsfgdsgg

【讨论】:

  • 它有效,但为了清楚起见,result 是一个列表,所以我打印了result[0].text。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多