Python Archivo XML: cómo leer, escribir y analizar

⚡ Resumen inteligente

Python El procesamiento XML le permite leer, escribir y analizar documentos XML utilizando los módulos integrados minidom y ElementTree. La clase minidom carga un archivo en la memoria como un DOM, mientras que ElementTree ofrece una forma más rápida y eficiente de hacerlo. PythonAPI de árbol ic.

  • 🔘 ¿Qué es XML? El lenguaje de marcado extensible (EXML) almacena y transporta datos pequeños y estructurados.
  • ☑️ Análisis de minidom: La función parse() carga un archivo XML en la memoria como un DOM.
  • Etiquetas de lectura: getElementsByTagName() devuelve los elementos coincidentes; getAttribute() lee sus valores.
  • 🧪 Nodos de escritura: createElement() y appendChild() agregan una nueva etiqueta a un documento.
  • 🛠️ API de ElementTree: ET.parse() construye un árbol; getroot() devuelve el elemento raíz.
  • 🤖 Preparado para la IA: El XML analizado introduce configuraciones y datos de API en los procesos de aprendizaje automático.

Python Archivo XML

Las secciones siguientes cubren el análisis, la escritura y la lectura de archivos XML en Python.

¿Qué es XML?

XML significa lenguaje de marcado extensible. Fue diseñado para almacenar y transportar cantidades pequeñas y medianas de datos y se usa ampliamente para compartir información estructurada.

Python te permite analizar y modificar documentos XML. Para analizar un documento XML, necesitas tener todo el documento XML en memoria. En este tutorial, veremos cómo podemos usar la clase XML minidom en Python para cargar y analizar archivos XML.

Cómo analizar XML usando minidom

Hemos creado un archivo XML de muestra que vamos a analizar.

Paso 1) Crear un archivo XML de muestra

Dentro del archivo podemos ver el nombre, apellido, domicilio y el área de especialización (SQL, Python, Pruebas y Negocios).

Cómo analizar XML usando minidom

Paso 2) Utilice la función de análisis para cargar y analizar el archivo XML

Una vez analizado el documento, imprimiremos el nombre del nodo raíz y el nombre de la primera etiqueta hija. El nombre de la etiqueta y el nombre del nodo son propiedades estándar del archivo XML.

Analizar XML usando minidom

  • Importa el módulo xml.dom.minidom y declara el archivo que debe ser analizado (myxml.xml).
  • Este archivo contiene información básica sobre un empleado, como nombre, apellido, domicilio, experiencia, etc.
  • Usamos la función de análisis en el minidom XML para cargar y analizar el archivo XML.
  • Tenemos una variable llamada `doc`, y `doc` obtiene el resultado de la función de análisis.
  • Queremos imprimir el nombre del nodo y el nombre de la etiqueta hija del archivo, así que lo declaramos en la función print.
  • Ejecute el código: imprime el nombre de nodo (#documento) del archivo XML y el nombre de la primera etiqueta secundaria (empleado) del archivo XML.

Nota: : El nombre del nodo y el nombre de la etiqueta secundaria son los nombres o propiedades estándar de un DOM XML.

Paso 3) Obtener la lista de etiquetas XML del documento XML e imprimirla.

A continuación, también podemos llamar a la lista de etiquetas XML del documento XML e imprimirla. Aquí imprimimos el conjunto de habilidades como SQL, Python, Pruebas y negocios.

Analizar XML usando minidom

  • Declara la experiencia variable, de la cual vamos a extraertractodos los nombres de experiencia que tiene el empleado
  • Utilice la función estándar dom llamada "getElementsByTagName"
  • Esto obtendrá todos los elementos llamados habilidad.
  • Declara un bucle sobre cada una de las etiquetas de habilidad.
  • Ejecuta el código: te dará una lista de cuatro habilidades.

Cómo escribir un nodo XML

Podemos crear un nuevo atributo utilizando la función "createElement" y luego agregar este nuevo atributo o etiqueta a las etiquetas XML existentes. Agregamos una nueva etiqueta "BigData" en nuestro archivo XML.

  1. Tienes que escribir código para añadir el nuevo atributo (BigData) a la etiqueta XML existente.
  2. Luego, debes imprimir la etiqueta XML con el nuevo atributo agregado a la etiqueta XML existente.

Escribir nodo XML

  • Para agregar una nueva etiqueta XML e incorporarla al documento, utilizamos el código “doc.createElement”.
  • Este código creará una nueva etiqueta de habilidad para nuestro nuevo atributo “BigData”.
  • Agregue esta etiqueta de habilidad al primer elemento secundario del documento (empleado).
  • Ejecuta el código: la nueva etiqueta "BigData" aparecerá junto con la otra lista de conocimientos especializados.

Ejemplo de analizador XML

Python 2 Ejemplo

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 Ejemplo

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();

Cómo analizar XML usando ElementTree

ElementTree es una API para manipular XML. ElementTree es una forma sencilla de procesar archivos XML.

Estamos utilizando el siguiente documento XML como datos de muestra:

<data>
   <items>
      <item name="expertise1">SQL</item>
      <item name="expertise2">Python</item>
   </items>
</data>

Leyendo XML usando ElementTree:

Primero debemos importar el módulo xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Ahora vamos a obtener el elemento raíz:

root = tree.getroot()

A continuación se muestra el código completo para leer los datos XML anteriores:

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)

Salida:

Expertise Data:
SQL
Python

Preguntas Frecuentes

Utilice minidom para archivos pequeños que necesiten navegación DOM. Elija ElementTree para la mayoría de los trabajos: es más rápido, más ligero y el recomendado, más Pythonic predeterminado.

Envuelve la raíz en un ElementTree y llama a tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True). Para la indentación, usa ET.indent() en Python 3.9+, o pretty_print de lxml.

lxml es una biblioteca de terceros que comparte la API de ElementTree, pero con código C rápido. Añade XPath, XSLT y validación. Se instala mediante pip install lxml.

Los analizadores sintácticos estándar son vulnerables a ataques XXE y de "mil millones de risas". Instale defusedxml e importe defusedxml.ElementTree, un reemplazo directo que desactiva las entidades externas peligrosas.

Sí. Utilice minidom.parseString(text) o ET.fromstring(text) de ElementTree, que devuelve la raíz directamente. Ambos analizan XML desde una variable, por lo que no es necesario guardar las respuestas previamente.

Recorre el árbol con ElementTree, creando un diccionario a partir de la etiqueta, los atributos y el texto de cada elemento. La biblioteca xmltodict automatiza la conversión mediante xmltodict.parse().

XML almacena configuraciones, anotaciones y respuestas de API que alimentan los modelos. Las etiquetas de imagen de Pascal VOC se envían como XML; ElementTree extracsus cuadros delimitadores para el entrenamiento.

Sí. GitHub Copilot autocompleta patrones de minidom y ElementTree como los bucles parse() y findall(). Aun así, verifica los nombres de las etiquetas y las codificaciones, y agrega defusedxml para entradas no confiables.

Resumir este post con: