我如何使用' list' xml.etree.ElementTree解析上其他属性的对象

时间:2018-02-15 10:27:09

标签: python xml

请告诉我怎么样?我想收到所有孩子的文字和标签" alarmTime"。但是,我收到一个错误。如何分配属性' list'?或者告诉我如何避免错误。

我的代码是:

import xml.etree.ElementTree as ET


tree = ET.parse('sample.xml')

root = tree.getroot()

for elem in root.iter(tag ='alarmTime'):
    data = elem.getchildren()

    print(data.text)

错误是:

  

AttributeError:' list'对象没有属性' text'

1 个答案:

答案 0 :(得分:0)

您遇到的问题是getchildren()返回子元素的列表,而不是单个元素。因此,此列表没有.text属性。要访问它,您现在需要遍历此列表(子元素)并为每个元素检索text

您可以使用ElementTree包非常轻松地执行此操作,因为它可以将元素视为包含其子元素的列表。因此,您不需要使用.getchildren来创建子元素列表 - elem本身就是一个。 (由于引入了此功能,因此不推荐使用.getchildren,并且建议您使用类似列表的功能。)

所以你的代码应该是这样的:

import xml.etree.ElementTree as ET


tree = ET.parse('sample.xml')

root = tree.getroot()

# find each alarmTime element
for elem in root.iter(tag ='alarmTime'):
    # loop over its child elements
    for child_elem in elem:
        # print the tag and text
        print(child_elem.tag)
        print(child_elem.text)

显然,您可能希望存储此信息,而不仅仅是打印它。如果您希望找到alarmTime元素的多个副本,每个副本都包含要检索tagtext的子元素,我会使用列表列表,每个子元素存储为其tagtext的元组。我通常也使用术语子元素而不是子元素

import xml.etree.ElementTree as ET


tree = ET.parse('sample.xml')

root = tree.getroot()

# main list for alarmTime data
alarmTime_list = []
for elem in root.iter(tag ='alarmTime'):
    # create a list for data from this alarmTime element
    data = []
    # loop over subelements
    for subelem in elem:
        # add the subelement tag and text as a tuple
        data.append((subelem.tag, subelem.text))
    # add the set of data for this alarmTime element to the main list
    alarmTime_list.append(data)

这些参考资料可能对您有所帮助: