Python ElementTree 获取前一个有条件的属性

Python ElementTree get previous attrib with a condition

我正在处理 XML 个文件。我的文件是这样的:

import xml.etree.ElementTree as ET

xml = '''
<root>
    <a name='name1' label='label1'
      <b>
        <result para='1'
      </b>
    </a>
    <a name='name2' label='label2'
      <b>
        <result para='2'
      </b>
    </a>
    <a name='name3' label='label3'
      <b>
        <result para='3'
      </b>
    </a>
</root>
'''

myroot = ET.fromstring(xml)

如果 b 的参数等于 1,我想打印 a 的标签。 我有这个代码:

for type_tag in myroot.findall('.//result'):
    if type_tag.attrib['para'] == '1':

但我不知道如何返回a打印标签。

任何帮助将不胜感激:)

提前致谢

按照建议,我把问题倒过来解决了:

for type_tag in myroot.findall('a'):
    lab = type_tag.attrib['label']
    for e in type_tag.findall('./b/result'):
        if e.attrib['para'] == '1':
            print(lab)

另一种更简短的方法是使用 xpath:

for type_tag in myroot.findall('.*//result[@para="1"]/../..'):
    print(type_tag.attrib['label'])

话虽如此,ET 仅支持 xpath 的有限子集。所以如果你有更复杂的 xml 来处理并且可以访问 lxml,你应该尝试使用它。