Parsing XML in Python

Parsing XML in Python

Oggi vediamo come fare il parsing di un file XML tramite Python.

Partiamo da un file XML così composto:

<?xml version="1.0" encoding="UTF-8"?>
<clienti>
  <cliente>
     <CODICE></CODICE>
     <RAGSOC></RAGSOC>
     <EMAIL></EMAIL>
  </cliente>
</clienti>

Per fare il parsing useremo il modulo minidom, ma non è ovviamente l'unico modo per farlo.

Però usando minidom è veramente molto semplice.

Ecco la nostra classe:

from xml.dom import minidom

class XmlFile(object):
    
    def readFile(self):
        xmlDoc = minidom.parse('clienti.xml')
        cliente = xmlDoc.getElementsByTagName("cliente")
        tabella = []
        for c in cliente:
            codice = c.getElementsByTagName('CODICE')[0]
            ragSoc = c.getElementsByTagName('RAGSOC')[0]
            email = c.getElementsByTagName('EMAIL')[0]
            list = []
            list.append(codice.firstChild.data)
            list.append(ragSoc.firstChild.data)
            if email.firstChild is None:
                list.append('')
            else:
                list.append(email.firstChild.data)
            tabella.append(list)
        return tabella
        
            
if __name__ == "__main__":
    f = XmlFile()
    print(f.readFile())

Qui non ci limitiamo a stampare record per record, ma a creare una struttura a "tabella" che poi può essere utile anche per riempire eventuali componenti grafici a tabella (tipo le wxpython Grid).

Come potete notare voi stessi, è tutto molto semplice.

Prima indichiamo il file da aprire (io non l'ho messo, ma bisognerebbe fare un controllo sull'esistenza del file, a meno che non glielo passate in altro modo).

Poi identifichiamo i vari tag cliente, e su ognuno troviamo i tag interni attraverso il metodo getElementsByTagName.

Nel ciclo ho impostato anche un controllo su un tag (email) per vedere se c'è un valore o meno; infatti in caso di tag vuoto, viene restituito un errore e il programma va in crash (e nel mio file, preso da un esempio reale, i tag possono essere vuoti).

Creiamo varie liste e le aggiungiamo alla lista finale, che si presenterà come una tabella.

Enjoy!