Programa Python para convertir XML a diccionario
El lenguaje de marcado extensible (XML) es un formato ampliamente utilizado para representar información estructurada. Es un lenguaje de marcado que nos permite definir nuestras propias etiquetas para describir los datos y su estructura.
XML está diseñado para ser legible tanto por humanos como por máquinas. Utiliza etiquetas de apertura y cierre para encerrar elementos, que pueden tener atributos y contener elementos anidados. La estructura de los documentos XML está definida por un conjunto de reglas denominadas Definición de tipo de documento (DTD) o Esquema XML.
En este artículo, veremos cómo convertir XML en un diccionario usando la programación Python.
Escenarios de entrada y salida
El siguiente es el escenario de entrada y salida para la conversión de XML a diccionario:
XML de entrada −
<root>
<data>
<fruit>
<name>Strawberry</name>
<color>Red</color>
<price>2.49</price>
</fruit>
<vegetable>
<name>Spinach</name>
<color>Green</color>
<price>1.99</price>
</vegetable>
</data>
</root>
Diccionario de salida −
{'root': {'data': {'fruit': {'name': 'Strawberry', 'color': 'Red', 'price': '2.49'}, 'vegetable': {'name': 'Spinach', 'color': 'Green', 'price': '1.99'}}}}
Usando la biblioteca xmltodict
La biblioteca xmltodict en Python proporciona la función xmltodict.parse() para analizar datos XML y convertirlos en un diccionario de Python.
Para utilizar la biblioteca xmltodict para la conversión de XML a diccionario, primero debemos instalarla. No forma parte de la biblioteca estándar de Python, pero podemos instalarla fácilmente usando pip. El siguiente es el comando.x
Ejemplo
#importing xmltodict module
import xmltodict
def xml_to_dict(xml_data):
#converting xml to dictionary
dict_data = xmltodict.parse(xml_data)
return dict_data
#defining an xml string
xml_data = '''
<root>
<data>
<fruit>
<name>Strawberry</name>
<color>Red</color>
<price>2.49</price>
</fruit>
<vegetable>
<name>Spinach</name>
<color>Green</color>
<price>1.99</price>
</vegetable>
</data>
</root>
'''
result_dict = xml_to_dict(xml_data)
print('Output Dictionary:')
print(result_dict)
Producción
Output Dictionary:
{'root': {'data': {'fruit': {'name': 'Strawberry', 'color': 'Red', 'price': '2.49'}, 'vegetable': {'name': 'Spinach', 'color': 'Green', 'price': '1.99'}}}}
Ejemplo
En este ejemplo, podemos ver cómo convertir datos XML de un archivo a un diccionario usando el módulo xmltodict.
import xmltodict
def xml_file_to_dict(file_path):
with open(file_path, 'r') as xml_file:
xml_data = xml_file.read()
dict_data = xmltodict.parse(xml_data)
return dict_data
#defining an xml file path
file_path = 'Sample.xml'
result_dict = xml_file_to_dict(file_path)
print('Output Dictionary:')
print(result_dict)
Producción
Output Dictionary:
{'market': {'fruits': {'fruit': [{'name': 'Apple', 'color': 'Red', 'price': '1.99'}, {'name': 'Banana', 'color': 'Yellow', 'price': '0.99'}, {'name': 'Orange', 'color': 'Orange', 'price': '1.49'}]}, 'vegetables': {'vegetable': [{'name': 'Carrot', 'color': 'Orange', 'price': '0.79'}, {'name': 'Broccoli', 'color': 'Green', 'price': '1.29'}, {'name': 'Tomato', 'color': 'Red', 'price': '0.99'}]}}}
Usando el módulo xml.etree.ElementTree
La función xml.etree.ElementTree.fromstring() es un método proporcionado por el módulo xml.etree.ElementTree en la biblioteca estándar de Python. Se utiliza para analizar datos XML en formato de cadena y crear un objeto Elemento que representa la raíz del árbol XML. A continuación se muestra la sintaxis de la función fromstring(). Esta función devuelve un objeto Elemento que representa la raíz del árbol XML.
xml.etree.ElementTree.fromstring(xml_string)
Donde, xml_string es una cadena que contiene los datos XML que se van a analizar.
Ejemplo
En este ejemplo, usaremos la función xml.etree.ElementTree.fromstring() para convertir XML en un diccionario.
import xml.etree.ElementTree as ET
def xml_to_dict(xml_data):
root = ET.fromstring(xml_data)
result = {}
for child in root:
if len(child) == 0:
result[child.tag] = child.text
else:
result[child.tag] = xml_to_dict(ET.tostring(child))
return result
#defining an xml string
xml_data = '''
<root>
<data>
<fruit>
<name>Strawberry</name>
<color>Red</color>
<price>2.49</price>
</fruit>
<vegetable>
<name>Spinach</name>
<color>Green</color>
<price>1.99</price>
</vegetable>
</data>
</root>
'''
result_dict = xml_to_dict(xml_data)
print('Output Dictionary:')
print(result_dict)
Producción
Output Dictionary:
{'data': {'fruit': {'name': 'Strawberry', 'color': 'Red', 'price': '2.49'}, 'vegetable': {'name': 'Spinach', 'color': 'Green', 'price': '1.99'}}}
Estos son algunos ejemplos para convertir XML en un diccionario usando la programación Python.