使用ETree在Python中进行简单的XML解析

时间:2017-09-16 15:31:01

标签: python xml parsing elementtree

我正在尝试使用最新版本的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>

2 个答案:

答案 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的最后一个元素。