Home / Programmazione / Python / Parsing XML in Python
Mattepuffo

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!