[英]Parsing XML using etree in Python
我查看了文档和其他类似的问题,但无法解决这里出了什么问题!
我想使用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
我究竟做错了什么?
doc.find('pa')
将搜索不存在的pa
元素 。
相反,您需要查找name
属性等于pa
str
元素 :
doc.find('.//str[@name="pa"]')
演示:
>>> for doc in tree.findall("doc"):
... pan = doc.find('.//str[@name="pa"]').text
... print pan
...
1234
5678
这应该工作......
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.