Skip to main content

Manejo de Archivos XML

XML Files Handling in Python

Los archivos XML en Python permiten la manipulación y el análisis de datos XML. XML (Lenguaje de Marcado Extensible) es un formato de intercambio de datos ampliamente utilizado.

Abrir archivo XML y leer datos con Python

Para leer datos de un archivo XML con Python, puedes usar el módulo analizador XML incorporado. En esta parte aprenderemos cómo analizar datos XML en Python explorando librerías populares de Python.

Las librerías más comúnmente usadas para analizar archivos XML son lxml y ElementTree.

Usando la librería lxml

La librería lxml es un lector popular de archivos XML, es bastante eficiente para analizar datos XML. Puedes instalar la librería lxml usando el comando pip.

from lxml import etree

root = etree.parse('file.xml')
for elem in root.iter():
    print(elem.tag, elem.text)

Usando ElementTree

ElementTree es una biblioteca integrada que permite parsear archivos XML. Con ElementTree, vienen módulos integrados que permiten el parseo y creación de elementos. Para usar la biblioteca ElementTree, necesitas importarla.

Aquí tienes un ejemplo de cómo puedes parsear un archivo XML usando ElementTree:

import xml.etree.ElementTree as ET

tree = ET.parse('file.xml')
root = tree.getroot()

for elem in root:
    print(elem.tag, elem.text)

Al utilizar cualquiera de estos métodos, puedes leer archivos XML de manera eficiente.

Cómo escribir XML

Para escribir XML en Python, puedes utilizar la biblioteca ElementTree XML API. Aquí hay dos ejemplos de código para demostrar cómo crear y escribir XML:

Ejemplo 1: Creando y escribiendo XML en Python

import xml.etree.cElementTree as ET

### Create XML element tree

root = ET.Element("Person")
name = ET.SubElement(root, "Name")
name.text = "John"
age = ET.SubElement(root, "Age")
age.text = "30"

### Write XML element tree to file

tree = ET.ElementTree(root)
tree.write("person.xml")

Ejemplo 2: Creando y Escribiendo XML con Atributos

import xml.etree.cElementTree as ET

### Create XML element tree with attributes
 
root = ET.Element("Person", {"id": "123"})
name = ET.SubElement(root, "Name")
name.text = "Jane"
age = ET.SubElement(root, "Age")
age.text = "25"

### Write XML element tree to file  with custom formatting

tree = ET.ElementTree(root)
tree.write("person.xml", encoding="utf-8", xml_declaration=True)

En ambos ejemplos, se utiliza la clase ElementTree() para crear un elemento XML árbol. A continuación, se utiliza el método write() para escribir el elemento tree en un archivo XML. Especificando encoding y xml_declaration en el segundo ejemplo, se crea un archivo XML con un formato personalizado y una declaración XML en la parte superior.

Cómo convertir XML a JSON

Convertir XML a JSON es una tarea común que se puede lograr fácilmente.

El módulo xmltodict nos permite convertir un documento XML en un diccionario, que luego puede convertirse fácilmente en JSON utilizando el módulo json incorporado. A continuación se muestra un fragmento de código de ejemplo que demuestra cómo utilizar este enfoque:

import xmltodict
import json

# Load XML file
with open('data.xml') as xml_file:
    xml_data = xml_file.read()

# Convert XML to Python dictionary
dict_data = xmltodict.parse(xml_data)

# Convert dictionary to JSON
json_data = json.dumps(dict_data)

# Output JSON data
print(json_data)

El módulo xml.etree.ElementTree nos permite analizar el documento XML y crear un objeto Element, que puede ser recorrido para obtener los datos requeridos. Una vez que tenemos los datos en forma de diccionario, podemos utilizar el módulo json para convertirlos a JSON. A continuación se muestra un fragmento de código de ejemplo que demuestra cómo utilizar este enfoque:

import xml.etree.ElementTree as ET
import json

# Load XML file
tree = ET.parse('data.xml')
root = tree.getroot()

# Traverse the Element object to get required data
xml_dict = {}
for child in root:
    xml_dict[child.tag] = child.text

# Convert dictionary to JSON
json_data = json.dumps(xml_dict)

# Output JSON data
print(json_data)

Cómo convertir XML a CSV

Para convertir XML a CSV, puedes usar el módulo xml.etree.ElementTree y el módulo csv. Aquí tienes dos ejemplos de código para ayudarte a comenzar:

Ejemplo 1: Usando los módulos ElementTree y CSV

import csv
import xml.etree.ElementTree as ET

### Open the XML file

tree = ET.parse('example.xml')
root = tree.getroot()

### Open the CSV file

csv_file = open('example.csv', 'w')
csvwriter = csv.writer(csv_file)

### Write the column headers

header = []
for child in root[0]:
    header.append(child.tag)
csvwriter.writerow(header)

### Write the data rows

for item in root.findall('.//item'):
    row = []
    for child in item:
        row.append(child.text)
    csvwriter.writerow(row)

### Close the CSV file

csv_file.close()

Ejemplo 2: Usando pandas

import pandas as pd
import xml.etree.ElementTree as ET

### Load the XML file into a dataframe

tree = ET.parse('example.xml')
root = tree.getroot()
dfcols = ['name', 'email', 'phone']
df = pd.DataFrame(columns=dfcols)

for node in root: 
    name = node.find('name').text
    email = node.find('email').text
    phone = node.find('phone').text

    df = df.append(
        pd.Series([name, email, phone], index=dfcols),
        ignore_index=True)

### Save the dataframe to a CSV file

df.to_csv('example.csv', index=False)

En ambos ejemplos, el módulo xml.etree.ElementTree se utiliza para analizar el archivo XML y extraer los datos. El módulo csv (en el Ejemplo 1) o la biblioteca pandas (en el Ejemplo 2) se utilizan para escribir los datos en un archivo CSV.

¡Contribuya con nosotros!

No dudes en contribuir a los tutoriales de Python en GitHub: crea un fork, actualiza el contenido y emite un pull request.

Profile picture for user AliaksandrSumich
Python engineer, expert in third-party web services integration.
Actualizado: 05/03/2024 - 22:51
Profile picture for user angarsky
Revisado y aprobado