2013-03-22 4 views
16

Sto analizzando un file XML tramite Element Tree in python e scrivendo il contenuto in un file cpp.Come posso verificare l'esistenza di attributi e tag in XML prima dell'analisi?

Il contenuto di tag per bambini sarà una variante per tag diversi. Ad esempio, il primo tag evento ha tag di parte come figlio ma il secondo tag evento non ha.

-> Come posso verificare se un tag esiste o meno prima dell'analisi?

-> I bambini hanno attributo valore nel primo tag evento ma non in secondo. Come posso verificare se un attributo esiste o meno prima di prenderne il valore.

-> Attualmente il mio codice genera un errore per il tag di parte non esistente e imposta un valore di attributo "Nessuno" per il secondo tag figlio.

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

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

</main> 

Codice:

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

voglio controllare i tag e poi prendere i loro valori.

risposta

40

Se un tag non esiste, .find() restituisce effettivamente None. Semplicemente testare per quel valore:

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

si utilizza già .get() su evento per verificare la value l'attributo; restituisce None anche se l'attributo non esiste.

attributi sono memorizzati nel dizionario .attrib, in modo da poter utilizzare le tecniche standard di Python per verificare l'attributo esplicitamente troppo:

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

@Martjin Pieters Lei ha parlato di se partito è None: Come faccio a scrivere in Python, se Vorrei scrivere qualcosa come - If party! = None: – Abhishek

+4

@Abhishek: 'se party non è None'. Vedi [operatori di confronto python] (http://docs.python.org/2/reference/expressions.html#not-in). –

+0

Grazie anche per aver menzionato come verificare gli attributi. Ottima risposta. – SSchneid