请告诉我怎么样?我想收到所有孩子的文字和标签" 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'
答案 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
元素的多个副本,每个副本都包含要检索tag
和text
的子元素,我会使用列表列表,每个子元素存储为其tag
和text
的元组。我通常也使用术语子元素而不是子元素:
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)
这些参考资料可能对您有所帮助:
iter()
和iterparse()
:
https://eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree