【问题标题】:Simple XML Parsing In Python Using ETree使用 ETree 在 Python 中进行简单的 XML 解析
【发布时间】:2017-09-16 15:31:00
【问题描述】:

我正在尝试使用最新版本的 python 中的元素树来解析这个 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>

【问题讨论】:

  • last=root.findall("./APPINFO")[-1]

标签: python xml parsing elementtree


【解决方案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

【讨论】:

  • 假设我有 &lt;DATA&gt; &lt;EMPLOYMENT&gt; &lt;TERMS&gt;&lt;/TERMS&gt; &lt;EMP_NAME1&gt;TEST1&lt;/EMP_NAME1&gt; &lt;/EMPLOYMENT&gt; &lt;EMPLOYMENT&gt; &lt;TERMS&gt;&lt;/TERMS&gt; &lt;EMP_NAME1&gt;TEST2&lt;/EMP_NAME1&gt; &lt;/EMPLOYMENT&gt; &lt;/DATA&gt; &lt;DATA&gt; &lt;EMPLOYMENT&gt; &lt;TERMS&gt;&lt;/TERMS&gt; &lt;EMP_NAME1&gt;TEST2&lt;/EMP_NAME1&gt; &lt;/EMPLOYMENT&gt; &lt;EMPLOYMENT&gt; &lt;TERMS&gt;&lt;/TERMS&gt; &lt;EMP_NAME1&gt;TEST4&lt;/EMP_NAME1&gt; &lt;/EMPLOYMENT&gt; &lt;/DATA&gt; 如何从最新的 DATA 实例中的每个就业元素中提取值?
  • @AlexanderWaldbaum 找到 DATA 元素并获取与上述示例类似的最后一个元素,然后遍历 data.findall('EMPLOYMENT')。如果您需要更多详细信息,请提出另一个问题。
【解决方案2】:
allAppInfo=root.findall("./APPINFO")

上面返回一个元素列表。

count=len(allAppInfo)

上面返回列表allAppInfo内元素的计数

last=allAppInfo[count-1]

上面返回列表中的最后一个元素,即索引count-1处的元素。

last=allAppInfo[-1]

上面还返回列表中的最后一个元素,该元素位于最后一个的索引 -1 处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2023-02-21
    • 2015-06-26
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    相关资源
    最近更新 更多