Converti XML in dizionario in Python
-
Usa il modulo
xmltodict
per convertire stringhe XML in un dizionario in Python -
Usa la libreria
cElemenTree
per convertire la stringa XML in un dizionario in Python
XML è noto come Extensible Markup Language. Viene utilizzato per archiviare e trasportare quantità di dati da piccole a medie ed è anche ampiamente utilizzato per la condivisione di informazioni strutturate. Python ci consente di analizzare e modificare i documenti XML.
In questo tutorial, dimostreremo come convertire una stringa XML in un dizionario in Python.
Usa il modulo xmltodict
per convertire stringhe XML in un dizionario in Python
xmltodict
è un modulo in Python che rende il lavoro con XML simile a JSON. A causa della struttura di XML, può essere facilmente convertito in un dizionario utilizzando questo modulo.
Vedi lo snippet di codice di seguito.
import xmltodict
xml_data = """
<student>
<id>DEL</id>
<name> Jack </name>
<email>jack@example.com</email>
<smeseter>8</smeseter>
<class>CSE</class>
<cgpa> 7.5</cgpa>
</student>
"""
d = xmltodict.parse(xml_data)
print(d)
Produzione:
OrderedDict([('student', OrderedDict([('id', 'DEL'), ('name', 'Jack'), ('email', 'jack@example.com'), ('smeseter', '8'), ('class', 'CSE'), ('cgpa', '7.5')]))])
Qui possiamo vedere che il risultato è sotto forma di un dizionario ordinato. Un dizionario ordinato conserva l’ordine delle coppie chiave-valore in un dizionario. La funzione parse()
qui analizza i dati XML in un dizionario ordinato.
Usa la libreria cElemenTree
per convertire la stringa XML in un dizionario in Python
cElementTree
è una libreria Python essenziale che ci consente di analizzare e navigare in un documento XML. Con cElementTree
, possiamo suddividere il documento XML in una struttura ad albero con cui è facile lavorare.
Creeremo la nostra funzione per analizzare i dati XML e convertirli in un dizionario. Useremo un oggetto di classe deafultdict
dal modulo collections
per ottenere il risultato finale nella nostra forma desiderata.
Vedere il seguente codice.
from collections import defaultdict
from xml.etree import cElementTree as ET
def xml2dict(t):
d = {t.tag: {} if t.attrib else None}
children = list(t)
if children:
dd = defaultdict(list)
for dc in map(etree_to_dict, children):
for k, v in dc.items():
dd[k].append(v)
d = {t.tag: {k: v[0] if len(v) == 1 else v for k, v in dd.items()}}
if t.attrib:
d[t.tag].update(("@" + k, v) for k, v in t.attrib.items())
if t.text:
text = t.text.strip()
if children or t.attrib:
if text:
d[t.tag]["#text"] = text
else:
d[t.tag] = text
return d
xml_data = ET.XML(
"""
<student>
<id>DEL</id>
<name> Jack </name>
<email>jack@example.com</email>
<smeseter>8</smeseter>
<class>CSE</class>
<cgpa> 7.5</cgpa>
</student>
"""
)
d = xml2dict(xml_data)
print(d)
Produzione:
{'student': {'id': 'DEL', 'name': 'Jack', 'email': 'jack@example.com', 'smeseter': '8', 'class': 'CSE', 'cgpa': '7.5'}}
Nota che questa è una struttura ad albero di un dizionario. Si noti che il dizionario finale è solitamente un dizionario annidato in entrambi i metodi. Ciò è dovuto alla struttura dell’XML.
Articolo correlato - Python Dictionary
- Come controllare se una chiave esiste in un dizionario in Python
- Converti un dizionario in una lista in Python
- Come ottenere tutti i file di una directory
- Trova il valore massimo nel dizionario Python
- Come ordinare un dizionario di Python per valore
- Come fondere due dizionari in Python 2 e 3