Convertir XML a diccionario en Python
-
Utilice el módulo
xmltodict
para convertir cadenas XML en un diccionario en Python -
Utilice la biblioteca
cElemenTree
para convertir cadenas XML en un diccionario en Python
XML se conoce como lenguaje de marcado extensible. Se utiliza para almacenar y transportar pequeñas o medianas cantidades de datos, y también se utiliza ampliamente para compartir información estructurada. Python nos permite analizar y modificar los documentos XML.
En este tutorial, demostraremos cómo convertir una cadena XML en un diccionario en Python.
Utilice el módulo xmltodict
para convertir cadenas XML en un diccionario en Python
xmltodict
es un módulo en Python que hace que trabajar con XML se sienta como JSON. Debido a la estructura de XML, se puede convertir fácilmente a un diccionario usando este módulo.
Consulte el fragmento de código a continuación.
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)
Producción :
OrderedDict([('student', OrderedDict([('id', 'DEL'), ('name', 'Jack'), ('email', 'jack@example.com'), ('smeseter', '8'), ('class', 'CSE'), ('cgpa', '7.5')]))])
Aquí, podemos ver que el resultado tiene la forma de un diccionario ordenado. Un diccionario ordenado conserva el orden de los pares clave-valor en un diccionario. La función parse()
aquí analiza los datos XML en un diccionario ordenado.
Utilice la biblioteca cElemenTree
para convertir cadenas XML en un diccionario en Python
cElementTree
es una biblioteca Python esencial que nos permite analizar y navegar por un documento XML. Con cElementTree
, podemos dividir el documento XML en una estructura de árbol con la que es fácil trabajar.
Crearemos nuestra propia función para analizar los datos XML y convertirlos en un diccionario. Usaremos un objeto de clase deafultdict
del módulo collections
para obtener el resultado final en la forma deseada.
Consulte el siguiente código.
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)
Producción :
{'student': {'id': 'DEL', 'name': 'Jack', 'email': 'jack@example.com', 'smeseter': '8', 'class': 'CSE', 'cgpa': '7.5'}}
Tenga en cuenta que esta es una estructura de árbol de un diccionario. Tenga en cuenta que el diccionario final suele ser un diccionario anidado en ambos métodos. Esto se debe a la estructura del XML.
Artículo relacionado - Python Dictionary
- Cómo comprobar si existe una clave en un diccionario en Python
- Convertir un diccionario en una lista en Python
- Cómo obtener todos los archivos de un directorio
- Cómo encontrar el valor máximo en el Diccionario Python
- Cómo ordenar un diccionario Python por valor
- Cómo fusionar dos diccionarios en Python 2 y 3