Python File XML: come leggere, scrivere e analizzare

Cos'è l'XML?

XML sta per eXtensible Markup Language. È stato progettato per archiviare e trasportare quantità di dati piccole e medie ed è ampiamente utilizzato per condividere informazioni strutturate.

Python consente di analizzare e modificare documenti XML. Per analizzare un documento XML, è necessario avere in memoria l'intero documento XML. In questo tutorial vedremo come utilizzare la classe Minidom XML in Python per caricare e analizzare file XML.

Come analizzare XML utilizzando minidom

Abbiamo creato un file XML di esempio che analizzeremo.

Passaggio 1) Creare un file XML di esempio

All'interno del file possiamo vedere il nome, il cognome, l'abitazione e l'area di competenza (SQL, Python, Test e Affari)

Come analizzare XML utilizzando minidom

Passaggio 2) Utilizzare la funzione di analisi per caricare e analizzare il file XML

Una volta analizzato il documento, stamperemo il file “nome nodo” della radice del documento e del “nome tag firstchild”. Tagname e nodename sono le proprietà standard del file XML.

Analizza XML utilizzando minidom

  • Importa il modulo xml.dom.minidom e dichiara il file che deve essere analizzato (myxml.xml)
  • Questo file contiene alcune informazioni di base su un dipendente come nome, cognome, casa, competenza, ecc.
  • Usiamo la funzione di analisi sul minidom XML per caricare e analizzare il file XML
  • Abbiamo una variabile doc e doc ottiene il risultato della funzione parse
  • Vogliamo stampare il nome del nodo e il nome del tag figlio dal file, quindi lo dichiariamo nella funzione print
  • Esegui il codice: stampa il nome del nodo (#document) dal file XML e il primo nome tag figlio (dipendente) dal file XML

Note::

Il nome del nodo e il nome del tag figlio sono i nomi o le proprietà standard di un dom XML.

Passaggio 3) Richiamare l'elenco dei tag XML dal documento XML e stamparlo

Successivamente, possiamo anche richiamare l'elenco dei tag XML dal documento XML e stamparlo. Qui abbiamo stampato l'insieme di competenze come SQL, Python, Testing e Affari.

Analizza XML utilizzando minidom

  • Dichiarare la competenza variabile, da cui estrarremo tutte le competenze che il nome del dipendente ha
  • Utilizza la funzione standard dom chiamata “getElementsByTagName”
  • Questo otterrà tutti gli elementi chiamati abilità
  • Dichiara il loop su ciascuno dei tag delle abilità
  • Esegui il codice: fornirà un elenco di quattro abilità

Come scrivere un nodo XML

Possiamo creare un nuovo attributo utilizzando la funzione "createElement" e quindi aggiungere questo nuovo attributo o tag ai tag XML esistenti. Abbiamo aggiunto un nuovo tag "BigData" nel nostro file XML.

  1. Devi codificare per aggiungere il nuovo attributo (BigData) al tag XML esistente
  2. Quindi, devi stampare il tag XML con i nuovi attributi aggiunti al tag XML esistente

Scrivi nodo XML

  • Per aggiungere un nuovo XML e aggiungerlo al documento, utilizziamo il codice “doc.create elements”
  • Questo codice creerà un nuovo tag di abilità per il nostro nuovo attributo "Big-data"
  • Aggiungi questo tag di abilità nel documento primo figlio (dipendente)
  • Esegui il codice: il nuovo tag "big data" verrà visualizzato con l'altro elenco di competenze

Esempio di parser XML

Python 2 Esempio

import xml.dom.minidom

def main():
# use the parse() function to load and parse an XML file
   doc = xml.dom.minidom.parse("Myxml.xml");
  
# print out the document node and the name of the first child tag
   print doc.nodeName
   print doc.firstChild.tagName
  
# get a list of XML tags from the document and print each one
   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
#Write a new XML tag and add it into the document
   newexpertise = doc.createElement("expertise")
   newexpertise.setAttribute("name", "BigData")
   doc.firstChild.appendChild(newexpertise)
   print " "

   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
if name == "__main__":
  main();

Python 3 Esempio

import xml.dom.minidom

def main():
    # use the parse() function to load and parse an XML file
    doc = xml.dom.minidom.parse("Myxml.xml");

    # print out the document node and the name of the first child tag
    print (doc.nodeName)
    print (doc.firstChild.tagName)
    # get a list of XML tags from the document and print each one
    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

    # Write a new XML tag and add it into the document
    newexpertise = doc.createElement("expertise")
    newexpertise.setAttribute("name", "BigData")
    doc.firstChild.appendChild(newexpertise)
    print (" ")

    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

if __name__ == "__main__":
    main();

Come analizzare XML utilizzando ElementTree

ElementTree è un'API per manipolare XML. ElementTree è il modo semplice per elaborare file XML.

Stiamo utilizzando il seguente documento XML come dati di esempio:

<data>
   <items>
      <item name="expertise1">SQL</item>
      <item name="expertise2">Python</item>
   </items>
</data>

Lettura XML utilizzando ElementTree:

dobbiamo prima importare il modulo xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Ora recuperiamo l'elemento root:

root = tree.getroot()

Di seguito è riportato il codice completo per la lettura dei dati XML sopra riportati

import xml.etree.ElementTree as ET
tree = ET.parse('items.xml')
root = tree.getroot()

# all items data
print('Expertise Data:')

for elem in root:
   for subelem in elem:
      print(subelem.text)

produzione:

Expertise Data:
SQL
Python

Sommario

Python ti consente di analizzare l'intero documento XML in una volta sola e non solo una riga alla volta. Per analizzare il documento XML è necessario avere l'intero documento in memoria.

  • Per analizzare il documento XML
  • Importa xml.dom.minidom
  • Utilizzare la funzione “parse” per analizzare il documento ( doc=xml.dom.minidom.parse (nome file);
  • Richiama l'elenco dei tag XML dal documento XML utilizzando il codice (=doc.getElementsByTagName( “nome dei tag xml”)
  • Per creare e aggiungere nuovi attributi nel documento XML
  • Utilizza la funzione “creaElement”