Python File XML: come leggere, scrivere e analizzare

⚡ Riepilogo intelligente

Python L'elaborazione XML consente di leggere, scrivere e analizzare documenti XML utilizzando i moduli integrati minidom ed ElementTree. La classe minidom carica un file in memoria come un DOM, mentre ElementTree offre un'elaborazione più veloce e più PythonAPI dell'albero ic.

  • 🔘 Cos'è l'XML? eXtensible Markup Language memorizza e trasporta dati strutturati di piccole dimensioni.
  • ☑️ Analisi di minidom: La funzione parse() carica un file XML in memoria come un DOM.
  • Lettura dei tag: Il metodo getElementsByTagName() restituisce gli elementi corrispondenti; il metodo getAttribute() ne legge i valori.
  • 🧪 Scrittura dei nodi: I metodi createElement() e appendChild() aggiungono un nuovo tag a un documento.
  • API di ElementTree: ET.parse() costruisce un albero; getroot() restituisce l'elemento radice.
  • 🤖 Pronto per l'intelligenza artificiale: I dati XML analizzati alimentano le pipeline di apprendimento automatico con configurazioni e dati API.

Python File XML

Le sezioni seguenti trattano l'analisi, la scrittura e la lettura di file XML in Python.

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 l'intero documento XML in memoria. In questo tutorial vedremo come possiamo 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 Business).

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 "nome del nodo" della radice del documento e il "nome del tag del primo figlio". Il nome del tag e il nome del nodo sono proprietà standard del file XML.

Analizza XML utilizzando minidom

  • Importa il modulo xml.dom.minidom e dichiara il file da analizzare (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:: Nodename e child tagname 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, Collaudo e Affari.

Analizza XML utilizzando minidom

  • Dichiarare la variabile competenza, dalla quale andremo a estrarlatracnon tutti i nomi di competenza che il dipendente ha
  • Utilizza la funzione standard dom chiamata “getElementsByTagName”
  • Questo otterrà tutti gli elementi chiamati abilità
  • Dichiara un ciclo su ciascuno dei tag skill
  • Esegui il codice: ti fornirà un elenco di quattro competenze

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. È necessario scrivere del codice per aggiungere il nuovo attributo (BigData) al tag XML esistente.
  2. Quindi, è necessario stampare il tag XML con il nuovo attributo aggiunto al tag XML esistente.

Scrivi nodo XML

  • Per aggiungere un nuovo tag XML e inserirlo nel documento, utilizziamo il codice "doc.createElement".
  • Questo codice creerà un nuovo tag di competenza per il nostro nuovo attributo "BigData".
  • Aggiungi questo tag skill al primo elemento figlio del documento (dipendente).
  • Esegui il codice: il nuovo tag "BigData" apparirà insieme agli altri termini dell'elenco.

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 la manipolazione di file XML. ElementTree è un 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:

Per prima cosa dobbiamo importare il modulo xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Ora recuperiamo l'elemento radice:

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

DOMANDE FREQUENTI

Utilizza minidom per i file di piccole dimensioni che necessitano di navigazione DOM. Scegli ElementTree per la maggior parte del lavoro: è più veloce, più leggero e il più consigliato. PythonIC predefinito.

Avvolgi la radice in un ElementTree e chiama tree.write("out.xml", encoding="utf-8", xml_declaration=True). Per l'indentazione, usa ET.indent() su Python 3.9+ oppure pretty_print di lxml.

lxml è una libreria di terze parti che condivide l'API di ElementTree ma è basata su codice C veloce. Aggiunge XPath, XSLT e validazione. Installala tramite pip install lxml.

I parser standard sono vulnerabili agli attacchi XXE e billion-laughs. Installa defusedxml e importa defusedxml.ElementTree, un sostituto diretto che disabilita le entità esterne pericolose.

Sì. Usa minidom.parseString(text) o ET.fromstring(text) di ElementTree, che restituisce direttamente la radice. Entrambi analizzano l'XML da una variabile, quindi non è necessario salvare prima le risposte.

Esplora l'albero con ElementTree, creando un dizionario a partire dal tag, dagli attributi e dal testo di ciascun elemento. La libreria xmltodict automatizza la conversione tramite xmltodict.parse().

XML memorizza configurazioni, annotazioni e risposte API che alimentano i modelli. Le etichette delle immagini Pascal VOC vengono distribuite come XML; ElementTree extracts i loro box di delimitazione per l'allenamento.

Sì. GitHub Copilot completa automaticamente i pattern di minidom ed ElementTree come i cicli parse() e findall(). Verifica comunque i nomi dei tag e le codifiche e aggiungi defusedxml per gli input non attendibili.

Riassumi questo post con: