Python ElementTree my root .findall () - PullRequest
       6

Python ElementTree my root .findall ()

0 голосов
/ 23 марта 2020

Я работаю с XML файлом с Python ElementTree. Мой файл выглядит так:

<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 тоже было в правильном положении.

Заранее спасибо за помощь,

1 Ответ

2 голосов
/ 23 марта 2020

Вы можете обновить выражение соответствия для поиска в поддереве (.//) всех элементов (*) с атрибутом 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'])
...