使用 ElementTree 访问 xml 文件中的元素和标签

Access element and tag in xml file using ElementTree

非常感谢您的阅读。对于这样一个初学者问题,我深表歉意,因为我确信这是一个简单的答案。非常感谢任何指导。

我有一个 xml 文件,我正在使用 ElementTree 对其进行解析,其中包含如下所示的元素:

data.xml:
<?xml version="1.0" encoding="utf-8"?><listings><listing id="26496000" dateFirstListed="2012-10-13" dateLastListed="2013-10-06" market="SALE" propertyType="DETACHED" bedrooms="4" latestAskingPrice="314950"><address key="u935d·0" udprn="50812465" line1="12 Millcroft" line2="Millhouse Green" town="SHEFFIELD" postcode="S36 9AR" /><description>  SOME TEXT HERE </description></listing>

我想访问 <description> 标签和 <address key>

使用 https://docs.python.org/2/library/xml.etree.elementtree.html 中的指南,我写:

import xml.etree.ElementTree
data = xml.etree.ElementTree.parse('data.xml')
root = data.getroot()

并遍历子元素:

for child in root:
    print child.tag, child.attrib
>
listing {'dateLastListed': '2013-10-06', 'dateFirstListed': '2012-10-13', 'propertyType': 'DETACHED', 'latestAskingPrice': '314950', 'bedrooms': '4', 'id': '26496000', 'market': 'SALE'}

这只为我提供了 <listing> 标签的子元素。如何更改上述表达式以访问 <address key><description>

编辑:遵循这个问题的指导

我试过写:

for i in root.findall("listing"):
    description = i.find('description')
    print description.text

    >
    AttributeError: 'NoneType' object has no attribute 'text'

您可以逐一遍历列表,然后获取内部 descriptionaddress 子元素。要访问属性,请使用 .attrib attribute:

import xml.etree.ElementTree as ET


data = ET.parse('data.xml')
root = data.getroot()
for listing in root.findall("listing"):
    address = listing.find('address')
    description = listing.findtext('description')

    print(description, address.attrib.get("key"))