xml.etree.ElementTree找不到XML中的所有元素

时间:2019-03-22 14:08:40

标签: python xml xml.etree

我有以下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>

在“ message”之后,我找不到以下任何子元素:

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)
  • 元素“ url”
  • 元素“ refcode”
  • 元素“状态”
  • 元素“消息”

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

2 个答案:

答案 0 :(得分:1)

您可以通过两种方式使用findall()different parts中的两个the docs中无奈地提到了这一点:

  

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

...

  

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

这意味着如果您寻找标签,您仅在搜索当前元素的 direct 子元素。

您可以改用XPath来查找您感兴趣的部分,这将通过查找匹配项的文档进行递归。以下任一方法都可以:

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

答案 1 :(得分:1)

出于完整性考虑,让我补充说,您也可以尝试使用xpath:

for i in tree.xpath('*//pcr/*'):
print(i.tag)

输出:

eCase01m
eProcedures03
eMedications03