Как проверить наличие атрибутов и тегов в XML перед разбором?

Я разбираю XML файл через Element Tree в python и записываю содержимое в файл cpp.

Содержимое тегов для детей будет вариантом для разных тегов. Например, тег первого события имеет сторонний тег как дочерний, но второй тег события не имеет.

- > Как проверить, существует ли тег или нет до разбора?

- > У детей есть атрибут value в теге 1-го события, но не во втором. Как проверить, существует ли атрибут или нет, прежде чем принимать его значение.

- > В настоящее время мой код выдает ошибку для не существующего партийного тега и устанавливает значение атрибута "Нет" для второго дочернего тега.

<main>
  <event>
    <party>Big</party>
    <children type="me" value="3"/>
  </event>

  <event>
    <children type="me"/>
  </event>

</main>

код:

import xml.etree.ElementTree as ET
tree = ET.parse('party.xml')
root = tree.getroot()
for event in root.findall('event'):
    parties = event.find('party').text
    children = event.get('value')

Я хочу проверить теги, а затем взять их значения.

Ответы

Ответ 1

Если тег не существует, .find() действительно возвращает None. Просто проверьте это значение:

for event in root.findall('event'):
    party = event.find('party')
    if party is None:
        continue
    parties = party.text
    children = event.get('value')

Вы уже используете .get() для события для проверки атрибута value; он возвращает None, если атрибут не существует.

Атрибуты хранятся в словаре .attrib, поэтому вы можете использовать стандартные методы Python для проверки атрибута явно:

if 'value' in event.attrib:
    # value attribute is present.