web-dev-qa-db-fra.com

Comment puis-je vérifier l'existence d'attributs et de balises en XML avant l'analyse?

J'analyse un fichier XML via Element Tree dans python et j'écris le contenu dans un fichier cpp.

Le contenu des balises enfants sera une variante pour différentes balises. Par exemple, la première balise d'événement a une balise de fête comme enfant, mais pas la deuxième balise d'événement.

-> Comment puis-je vérifier si une balise existe ou non avant l'analyse?

-> Les enfants ont l'attribut value dans le 1er tag d'événement mais pas dans le second. Comment puis-je vérifier si un attribut existe ou non avant de prendre sa valeur.

-> Actuellement, mon code génère une erreur pour la balise de partie inexistante et définit une valeur d'attribut "Aucun" pour la deuxième balise enfant.

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

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

</main>

Code:

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

Je veux vérifier les balises, puis prendre leurs valeurs.

28
Abhishek

Si une balise n'existe pas, .find() renvoie en effet None. Testez simplement cette valeur:

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

Vous utilisez déjà .get() sur l'événement pour tester l'attribut value; il renvoie également None si l'attribut n'existe pas.

Les attributs sont stockés dans le dictionnaire .attrib, Vous pouvez donc utiliser des techniques standard Python pour tester explicitement l'attribut également:

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