XML使用xml.etree.ElementTree解析子元素

时间:2016-01-27 16:43:22

标签: python xml parsing

我试图按字母顺序返回所有英国艺术家 - 我还没有完全理解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>
    '''

1 个答案:

答案 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就地对列表进行排序。