在 Python 中解析 XML Pastebin 响应
Parsing XML Pastebin response, in Python
我正在尝试通过他们的 API 在 Pastebin 上搜索内容。我正在使用 pastebin 库搜索 python.
问题是我收到一个 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
时将其解析为 return 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
returns
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
时,我如何 return paste_key
的元素
编辑 2
中奖彩票:
result = xml.findall(".//paste[paste_title='goodPaste']/paste_key")
print result[0].text
您可以为此使用 XPath:
result = xml.findall(".//paste[paste_title='goodPaste']/paste_key")
print result.text
在你的情况下应该打印 fsfgdsgg
我正在尝试通过他们的 API 在 Pastebin 上搜索内容。我正在使用 pastebin 库搜索 python.
问题是我收到一个 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
时将其解析为 return 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
returns
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
您可以为此使用 XPath:
result = xml.findall(".//paste[paste_title='goodPaste']/paste_key")
print result.text
在你的情况下应该打印 fsfgdsgg