Python ElementTree получить предыдущий атрибут с условием - PullRequest
1 голос
/ 21 апреля 2020

Я работаю с 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)

Я хочу напечатать этикетку из a, если параграф из b равен 1. У меня есть этот код:

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

Но я не знаю, как go вернуться к a, чтобы напечатать этикетку.

Любая помощь будет признательна:)

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Другой, более короткий, способ сделать это - использовать xpath:

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

Сказав это, ET поддерживает только ограниченное подмножество xpath. Так что если у вас есть более сложный xml для работы и есть доступ к l xml, вы должны попытаться использовать это.

1 голос
/ 21 апреля 2020

как предложено, я взял проблему назад и решил ее так:

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)
...