我试图按字母顺序返回所有英国艺术家 - 我还没有完全理解XML解析。我从调试和文档中收集的是,当你使用findall()方法时,它会返回一个无法进一步导航的列表,这是正确的吗?那么如何迭代父节点的子元素,在本例中为<cd>
,以查找其国家==&#39; UK&#39 ;?的所有元素。提前致谢!
def get_uk_artists(xmlstr):
xml = ET.fromstring(xmlstr)
artist_list = []
for each in xml.findall('cd'):
if each.findall('./cd/country').text == 'UK':
artist_list.append(each.findall('artist').text)
return artist_list.sort()
XML是:
xml_doc ='''<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist sex="male">Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist sex="female">Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
<cd>
<title>Greatest Hits</title>
<artist sex="female">Dolly Parton</artist>
<country>USA</country>
<company>RCA</company>
<price>9.90</price>
<year>1982</year>
</cd>
<cd>
<title>Still got the blues</title>
<artist sex="male">Gary Moore</artist>
<country>UK</country>
<company>Virgin records</company>
<price>10.20</price>
<year>1990</year>
</cd>
</catalog>
'''
答案 0 :(得分:2)
您可以使用:
import xml.etree.ElementTree as ET
xml = ET.fromstring(xml_doc)
artists = []
for cd in xml.findall('cd'):
if cd.find('country').text == 'UK':
artists.append(cd.find('artist').text)
artists.sort()
print(artists)
<强>输出强>
['Bonnie Tyler', 'Gary Moore']
这会遍历文档中的每个cd
。如果cd
的{{1}}子元素的文字等于country
,则'UK'
艺术家名称会附加到艺术家列表中。然后cd
就地对列表进行排序。