我查看了文档和其他类似的问题,但无法解决这里出了什么问题!
我想使用API的XML输出。
我的XML看起来有点像这样:
<response>
<lst></lst>
<result>
<doc>
<str name ="pa">1234</str>
<str name ="et">Title 1</str>
<str name ="pb">Publisher 1</str>
<str name ="ur">http://www.exampleone.com</str>
</doc>
<doc>
<str name ="pa">5678</str>
<str name ="et">Title 2</str>
<str name ="pb">Publisher 2</str>
<str name ="ur">http://www.exampletwo.com</str>
</doc>
</result>
我想为每个doc元素获取“pa”。
这是我正在使用的代码,但什么都没有:
import requests
import xml.etree.ElementTree as ET
r = requests.get("api url goes here")
tree = ET.fromstring(r.content)
for doc in tree.findall("doc"):
pan = doc.find('pa').text
print pan
我做错了什么?
答案 0 :(得分:3)
doc.find('pa')
会搜索不存在的 pa
元素。
相反,您需要查找 str
元素,name
属性等于pa
:
doc.find('.//str[@name="pa"]')
演示:
>>> for doc in tree.findall("doc"):
... pan = doc.find('.//str[@name="pa"]').text
... print pan
...
1234
5678
答案 1 :(得分:0)
这应该有用......
import xml.etree.ElementTree as ET
resp = '''<response><lst></lst><result><doc>
<str name ="pa">1234</str>
<str name ="et">Title 1</str>
<str name ="pb">Publisher 1</str>
<str name ="ur">http://www.exampleone.com</str>
</doc>
<doc>
<str name ="pa">5678</str>
<str name ="et">Title 2</str>
<str name ="pb">Publisher 2</str>
<str name ="ur">http://www.exampletwo.com</str>
</doc></result></response>'''
tree = ET.fromstring(resp)
for pan in tree.findall('.//str[@name="pa"]'):
print(pan.text)
使用您的代码,它需要进行微小的更改才能工作:
或者:
for doc in tree[1].findall("doc"):
pan = doc.find('str[@name="pa"]').text
print (pan)
或者
for doc in tree.findall(".//doc"):
pan = doc.find('str[@name="pa"]').text
print (pan)