首页 > 解决方案 > xml.etree.ElementTree 未在 XML 中找到所有元素

问题描述

我有以下 XML 文件,我正在尝试使用 xml.etree 进行迭代:

<safetypadapiresponse><url></url><refcode /><status>SUCCESS</status><message><pcrs>
  <pcr>
    <eCase01m>1234</eCase01m>
    <eProcedures03>12 Lead ECG Obtained</eProcedures03>
    <eMedications03>Oxygen</eMedications03>
  </pcr>
</pcrs></message></safetypadapiresponse>

在“消息”之后,我无法找到任何子元素,其中包含以下内容:

import xml.etree.ElementTree as ET

tree = ET.parse(xmlFile)
root = tree.getroot()

for member in root.findall('pcr'):
  print(member)

运行以下命令时会列出以下子元素:

for member in root:
  print(member)

我正在尝试检索 pcr 元素下的所有信息(即 eCase01m、eProcedures03、eMedications03)。

标签: pythonxmlxml.etree

解决方案


您可以通过findall()两种方式使用。文档的两个不同部分都提到了这一点,这是毫无帮助的:

Element.findall() 仅查找带有标签且是当前元素的直接子元素的元素。

...

按标签名称或路径查找所有匹配的子元素。返回包含文档顺序中所有匹配元素的列表。

这意味着如果你寻找一个标签,你只是在搜索当前元素的直接子元素。

您可以改用 XPath 来查找您感兴趣的部分,这将通过文档递归查找匹配项。以下任何一项都应该这样做:

root.findall('./message/pcrs/pcr')  # Find them relative to this node
root.findall('.//pcr')  # Find them anywhere below the current node

推荐阅读