我有一些XML,其中每个元素的属性略有不同。我只想拉出具有population属性的元素。下面的代码可以工作。但是,如果取消对population赋值的注释并在底部打印,则会失败,因为population属性不在前两个元素中。如何只选择具有特定属性的元素?这是我唯一需要的。
from xml.etree import ElementTree as ET
xml = '''<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E" population="500"/>
</country>
</data>'''
root = ET.fromstring(xml)
print(root.tag)
print(root.findall('.//data/country'))
for target in root.findall('.//country'):
name = target.attrib['name']
#population = target.attrib['population']
print(name)
#print(population)
在代码中,您正在寻找具有population
属性的country
元素,但是没有这样的元素。
要获得任何具有population
属性的元素,您可以为元素名称使用通配符:
for target in root.findall('.//*[@population]'):
print(target.tag, target.attrib)
输出:
neighbor {'name': 'Colombia', 'direction': 'E', 'population': '500'}