En este tutorial, veremos algunos ejemplos del uso de Python para analizar XML o Lenguaje de marcado extensible. XML es como una versión más flexible de HTML. Es un lenguaje de marcado que define un conjunto de reglas para codificar documentos en un formato que es legible por humanos y legible por máquina. Hay un par de formas diferentes en que las computadoras analizan XML. La primera se conoce como API simple para XML, también conocida como SAX. La otra forma de analizar XML es mediante el DOM o el modelo de objetos de documento. Volvamos a SAX por un momento. SAX lee los datos XML de un carácter a la vez hasta el final del documento. A medida que se lee el XML, el analizador emite eventos relacionados con el contenido XML. Usando Python, podemos manejar estos eventos a medida que ocurren.


Eventos SAX

Cuando el analizador encuentra XML como vemos a continuación, genera un evento para cuando está comenzando, y luego, cuando el analizador alcanza este paréntesis angular de cierre de la etiqueta de apertura, enviará un evento de etiqueta de inicio con el nombre de la etiqueta y una colección. de los atributos y sus valores. Cuando el analizador alcanza el corchete de ángulo de apertura de la etiqueta de cierre, enviará un evento de etiqueta final y cuando alcance el corchete de cierre de la etiqueta de cierre, también enviará un evento para eso.

análisis de la API XML de sax

A medida que se generan estos eventos, podemos usar Python para responder y operar con los datos. Cuando se utiliza SAX, no se puede acceder al contenido del XML en orden aleatorio. Recuerde, SAX funciona moviéndose a través del archivo XML carácter por carácter hasta que llega al final del documento. No puede "rebobinar" ni hacer una copia de seguridad durante este proceso. Además, SAX no puede cambiar los datos XML durante el procesamiento. Por esta razón, SAX es bueno cuando se usa XML como archivo de configuración.


API SAX

Para usar la API SAX en Python, usamos el módulo xml.sax . Así que vamos a importar ese módulo para ejecutar algún código de prueba. Una vez importados, tendremos acceso a una función xml.sax.parse () que puede trabajar con un archivo o un objeto de flujo. Otra función que podemos usar es la función xml.sax.parseString () que se puede usar si ya tiene el XML en una variable de cadena. Además de estas funciones, hay una clase base denominada ContentHandler que se puede utilizar para el procesamiento de contenido personalizado. La clase ContentHandler tiene funciones para manejar el inicio y el final del documento, el inicio y el final de las etiquetas y el manejo de datos de texto. Puede crear su propia clase que anule estas funciones para manejar cada tipo de contenido.

Ejemplo XML de Python SAX

A continuación, tenemos algunos datos XML de muestra. Se almacena en un archivo de nombres xmldata.xml.

<? xml version = "1.0" encoding = "UTF-8"?>
<blogposts title = "Colección de publicaciones de blog" date = "A date" author = "Algún tipo">

   <post type = "resumen">
      <title> Analizar XML con SAX </title>
   </post>

   <post type = "detalle">
      <title> Descripción general </title>
      <entrada>
         Analizar XML es genial
      </entry>
      <entrada />
      <entrada>
         Diviértete con el análisis de XML
      </entry>
   </post>
</blogposts>

Los datos XML en los que estamos trabajando representan un elemento de publicación de blog ficticio. Hay una etiqueta raíz de publicaciones de blog y tiene algunos atributos y, dentro de las publicaciones de blog, hay algunas publicaciones y cada publicación tiene algunas entradas. El código extrae información de este XML a medida que el analizador SAX lo analiza. Hay funciones que indicarán que estamos comenzando a procesar el documento y que estamos terminando de procesar. Para imprimir el nombre de las publicaciones de blog, se utiliza la función startElement. También hay métodos de endElement, characters, startDocument y endDocument. Para ejecutar el programa, lo colocamos dentro de la función main () de Python. Se asigna una nueva instancia de CustomContentHandler a la variable del controlador. Luego, simplemente usamos xml.sax.parse () para leer los datos e imprimir algunos resultados.

¡A punto de empezar!
Título de las publicaciones de blog: Colección de publicaciones de blog
Título: Analizar XML con SAX
Título: Descripción general
¡Terminando!
Había 2 elementos de publicación
Había 3 elementos de entrada

Proceso terminado con código de salida 0

API DOM XML

Otra forma en que se puede manipular el contenido XML es mediante la API del modelo de objetos de documento o DOM. Una de las grandes diferencias entre DOM API y SAX API es que DOM le permite acceder a cualquier parte del archivo XML al azar. Esto no es posible con SAX ya que lee un carácter a la vez de principio a fin. Con DOM, también puede modificar el contenido del archivo XML. Cuando se usa DOM para analizar el código XML, el XML se lee en la memoria en su totalidad y se representa como una estructura de árbol. A continuación, puede utilizar varias API para trabajar en el árbol del documento resultante. La biblioteca estándar de Python proporciona una implementación de la API DOM en el módulo xml.dom.minidom . Se pretende que sea una implementación más pequeña que la API DOM completa. A continuación se presentan algunos de los puntos clave y métodos que debe conocer.

  • Accede a cualquier parte de la estructura XML de forma aleatoria
  • Modificar contenido XML
  • Representa XML como una estructura de árbol jerárquica
  • xml.dom.minidom es una implementación ligera
  • domtree = xml.com.minidom.parseString (str)
  • elem.getElementById (id)
  • elem.getElementsByTagName (nombre de etiqueta)
  • elem.getAttribute (nombreAtributo)
  • elem.setAttribute (nombreAtributo, val)
  • newElem = document.createElement (nombre de etiqueta)
  • newElem = document.createTextNode (strOfText)
  • elem.appendChild (newElem)

Aquí hay un ejemplo del uso de xml.dom.minidom para operar en el mismo archivo xmldata.xml que usamos en el ejemplo de SAX. Observe que este método proporciona un poco más de flexibilidad e incluso podemos agregar datos al archivo en la memoria. Muchos de nosotros estamos bastante familiarizados con DOM ya que es muy común en el desarrollo web, por lo que trabajar con XML en Python usando DOM es bastante fácil de entender.

El elemento raíz son las publicaciones de blog
El título es: Colección de publicaciones de blog
Hay 3 etiquetas de entrada
Ahora hay 4 etiquetas de entrada

<? xml version = "1.0"?> <blogposts title = "Colección de publicaciones de blog" date = "A date" author = "Some dude">

   <post type = "resumen">
      <title> Analizar XML con SAX </title>
   <entry> ¡Entrada mágica! </entry> </post>

   <post type = "detalle">
      <title> Descripción general </title>
      <entrada>
         Analizar XML es genial
      </entry>
      <entrada />
      <entrada>
         Diviértete con el análisis de XML
      </entry>
   </post>
</blogposts>

Proceso terminado con código de salida 0

API XML ElementTree

La API DOM es amplia y ofrece una API multiplataforma y en varios idiomas para trabajar con datos XML. La API ElementTree adopta un enfoque diferente al enfocarse en ser una forma más simple de trabajar con XML. Con la API ElementTree, los elementos se tratan como si fueran listas. Esto significa que si tiene un elemento XML que contiene otros elementos, es posible iterar sobre esos elementos secundarios usando una iteración estándar como un bucle for. La API ElementTree trata los atributos como diccionarios. Entonces, si tiene una referencia a un elemento, puede acceder a su propiedad attrib, que es un diccionario de todos los nombres y valores de los atributos. ElementTree facilita la búsqueda de contenido dentro de XML. Ofrece funciones que pueden utilizar la sintaxis XPath para buscar datos específicos en XML.

En el siguiente ejemplo, usamos la API ElementTree para probar estos conceptos. Una vez más, usamos el mismo archivo de datos XML que hemos estado usando para todo el tutorial. Podemos ver cómo construir una estructura de documento y encontrar el elemento raíz del árbol. Podemos acceder a un atributo, iterar sobre etiquetas, contar la cantidad de elementos, agregar nuevos datos, etc.

publicaciones de blog
Colección de publicaciones de blog
enviar
enviar
Hay 2 elementos de publicación
Hay 3 elementos de entrada
Ahora hay 3 elementos de publicación
Ahora hay 3 elementos de entrada

Proceso terminado con código de salida 0


Resumen de análisis de XML de Python

El problema de leer, escribir y manipular datos XML en Python se resuelve utilizando cualquiera de las bibliotecas mencionadas en este tutorial. Echamos un vistazo a la API SAX para XML, la API DOM para XML y, por último, la API ElementTree para XML. Cada uno tiene sus pros y contras, y algunos de los enlaces anteriores ofrecerán más consejos y trucos para trabajar con XML en Python.