我正在尝试使用最新版本的python中的Element Tree解析此XML。我想做的是计算APPINFO元素的数量,然后从APPINFO的最新实例(树中的最后一个)中获取数据。到目前为止,我可以使用
获取APPINFO元素的数量count = len(root.findall("./APPINFO"))
但是,如何仅引用树中的最后一个并提取值?
<APPLICANT>
<APPINFO>
<FIRSTNAME>Joe</FIRSTNAME>
<LASTNAME>Smith</LASTNAME>
<MIDDLENAME></MIDDLENAME>
<OTHERNAME></OTHERNAME>
</APPINFO>
<APPLICANT>
<APPINFO>
<FIRSTNAME>Peter</FIRSTNAME>
<LASTNAME>Smith</LASTNAME>
<MIDDLENAME></MIDDLENAME>
<OTHERNAME></OTHERNAME>
</APPINFO>
<APPINFO> #I need the data out of this one only
<FIRSTNAME>John</FIRSTNAME>
<LASTNAME>Smith</LASTNAME>
<MIDDLENAME></MIDDLENAME>
<OTHERNAME></OTHERNAME>
</APPINFO>
答案 0 :(得分:1)
计算和访问最后一个元素的工作示例。使用列表时,负索引访问列表末尾的元素。
from xml.etree import ElementTree as et
data = '''\
<APPLICANT>
<APPINFO>
<FIRSTNAME>Joe</FIRSTNAME>
<LASTNAME>Smith</LASTNAME>
<MIDDLENAME></MIDDLENAME>
<OTHERNAME></OTHERNAME>
</APPINFO>
<APPINFO>
<FIRSTNAME>Peter</FIRSTNAME>
<LASTNAME>Smith</LASTNAME>
<MIDDLENAME></MIDDLENAME>
<OTHERNAME></OTHERNAME>
</APPINFO>
<APPINFO>
<FIRSTNAME>John</FIRSTNAME>
<LASTNAME>Smith</LASTNAME>
<MIDDLENAME></MIDDLENAME>
<OTHERNAME></OTHERNAME>
</APPINFO>
</APPLICANT>'''
tree = et.fromstring(data)
appinfo = tree.findall("./APPINFO")
print(len(appinfo))
et.dump(appinfo[-1])
print(appinfo[-1].find('FIRSTNAME').text)
输出:
3
<APPINFO>
<FIRSTNAME>John</FIRSTNAME>
<LASTNAME>Smith</LASTNAME>
<MIDDLENAME />
<OTHERNAME />
</APPINFO>
John
答案 1 :(得分:0)
allAppInfo=root.findall("./APPINFO")
以上返回元素列表。
count=len(allAppInfo)
以上内容返回列表allAppInfo
last=allAppInfo[count-1]
上面返回列表中的最后一个元素,它是索引count-1
的元素。
last=allAppInfo[-1]
上面还返回列表中距离最后一个索引为-1的最后一个元素。