Parsing XML in Python

Mattepuffo's logo
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!


Condividi

1 Commenti

  • sergio

    Ciao matteo ho un file xml da 5gb non mi riesce di parsarlo con quasi nessuna libreria di python , pensi ci sia una soluzione o una particolare configurazione per riuscirci ? mi va in out of memory :(

    05/05/2021

Commentami!