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

j'analyse un fichier XML via L'arborescence des éléments en python et j'écris le contenu dans un fichier cpp.

le contenu des tags enfants sera une variante pour les tags différents. Par exemple le premier événement balise balise fête de l'enfant mais la deuxième balise événement n'a pas.

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

-- >les enfants ont l'attribut de valeur dans la balise 1st event mais pas dans la seconde. Comment puis-je vérifier si un attribut existe ou pas avant prendre de la valeur.

-- > actuellement mon code affiche une erreur pour l'étiquette party non existante et définit une valeur d'attribut "None" pour la deuxième étiquette children.

<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 étiquettes et les valeurs.

20
demandé sur Martijn Pieters 2013-03-22 14:30:40

1 réponses

Si une balise n'existe pas, .find() en effet renvoie None. Testez simplement pour 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 les cas de test pour le value l'attribut; elle renvoie None ainsi si l'attribut n'existe pas.

les Attributs sont stockés dans le .attrib dictionnaire, de sorte que vous pouvez utiliser standard de Python techniques de test pour l'attribut explicitement trop:

if 'value' in event.attrib:
    # value attribute is present.
45
répondu Martijn Pieters 2013-03-22 10:33:17