Python 元素树 myroot.findall()

Python ElementTree myroot.findall()

我正在使用带有 Python ElementTree 的 XML 文件。 我的文件是这样的:

<a expr="bla" para="1"/>
<a expr="bla" para="1">
  <b expr="bli" para="2"/>
<a exp="bla" para="1"/>
...

我想打印 expr,不管它是 a 还是 b。 应该是这样的:

expr = "bla"
expr = "bla"
expr = "bli"
expr = "bla"

我写了这段代码:

for type_tag in myroot.findall('a'):
    expression = type_tag.get('expr')
    print("expr = ", expression)

但我不知道如何改进它,使 b 也位于正确的位置。

在此先感谢您的帮助,

您可以更新匹配表达式以在子树 (.//) 中搜索具有 expr 属性 ([@expr]) 的所有元素 (*)。

import xml.etree.ElementTree as ET

xml = '''
<root>
<a expr="bla" para="1"/>
<a expr="bla" para="1">
  <b expr="bli" para="2"/>
</a>
<a exp="bla" para="1"/>
</root>
'''
myroot = ET.fromstring(xml)

for e in myroot.findall(".//*[@expr]"):
    print(e.attrib['expr'])