Crear un analizador XML en Python

Vaibhhav Khetarpal 10 octubre 2023
  1. Utilice la API ElementTree para analizar un documento XML en Python
  2. Utilice el módulo minidom para analizar un documento XML en Python
  3. Utilice la biblioteca Beautiful Soup para analizar un documento XML en Python
  4. Utilice la biblioteca xmltodict para analizar un documento XML en Python
  5. Utilice la biblioteca lxml para analizar un documento XML en Python
  6. Utilice el módulo untangle para analizar un documento XML en Python
  7. Utilice la biblioteca declxml para analizar un documento XML en Python
Crear un analizador XML en Python

XML es una abreviatura de eXtensible Markup Language y es un lenguaje autodescriptivo que se utiliza para almacenar y transportar datos. Python proporciona un medio para analizar y modificar un documento XML.

Este tutorial se enfoca y demuestra diferentes métodos para analizar un documento XML en Python.

Utilice la API ElementTree para analizar un documento XML en Python

El módulo xml.etree.ElementTree se utiliza para generar una API eficiente pero simple para analizar el documento XML y crear datos XML.

El siguiente código utiliza el módulo xml.etree.ElementTree para analizar un documento XML en Python.

# >= Python 3.3 code
import xml.etree.ElementTree as ET

file1 = """<foo>
           <bar>
               <type foobar="Hello"/>
               <type foobar="God"/>
          </bar>
       </foo>"""
tree = ET.fromstring(file1)
x = tree.findall("bar/type")
for item in x:
    print(item.get("foobar"))

Producción :

Hello
God

Aquí, pasamos los datos XML como una cadena entre comillas triples. También podemos importar un documento XML real con la ayuda de la función parse() del módulo ElementTree.

El módulo cElementTree fue la implementación en C de la API ElementTree, con la única diferencia de que cElementTree está optimizado. Dicho esto, puede analizar entre 15 y 20 veces más rápido que el módulo ElementTree y utiliza una cantidad muy baja de memoria.

Sin embargo, en Python 3.3 y superior, el módulo cElementTree ha quedado obsoleto y el módulo ElementTree utiliza una implementación más rápida.

Utilice el módulo minidom para analizar un documento XML en Python

El xml.dom.minidom se puede definir como una implementación básica de la interfaz Document Object Model (DOM). Todas las aplicaciones DOM normalmente comienzan con el análisis de un objeto XML. Por lo tanto, este método es el método más rápido para analizar un documento XML en Python.

El siguiente código utiliza la función parse() del módulo minidom para analizar un documento XML en Python.

Archivo XML (sample1.xml):

<data>
    <strings>
        <string name="Hello"></string>
        <string name="God"></string>
    </strings>
</data>

Código Python:

from xml.dom import minidom

xmldoc = minidom.parse("sample1.xml")
stringlist = xmldoc.getElementsByTagName("string")
print(len(stringlist))
print(stringlist[0].attributes["name"].value)
for x in stringlist:
    print(x.attributes["name"].value)

Producción :

2
Hello
God

Este módulo también permite que el XML se pase como una cadena, similar a la API ElementTree. Sin embargo, utiliza la función parseString() para lograr esto.

Se dice que los módulos xml.etree.ElementTree y xml.dom.minidom no son seguros frente a datos construidos con fines malintencionados.

Utilice la biblioteca Beautiful Soup para analizar un documento XML en Python

La biblioteca Beautiful Soup está diseñada para proyectos de web scraping y extraer los datos de archivos XML y HTML. Beautiful Soup es realmente rápido y puede analizar cualquier cosa que encuentre.

Esta biblioteca incluso realiza el proceso de recorrido de árbol para el programa y analiza el documento XML. Además, Beautiful Soup también se utiliza para embellecer el código fuente dado.

La biblioteca Beautiful Soup debe instalarse manualmente y luego importarse al código Python para este método. Esta biblioteca se puede instalar usando el comando pip. La biblioteca Beautiful Soup 4, que es la última versión, funciona en Python 2.7 y superior.

El siguiente código utiliza la biblioteca Beautiful Soup para analizar un documento XML en Python.

from bs4 import BeautifulSoup

file1 = """<foo>
   <bar>
      <type foobar="Hello"/>
      <type foobar="God"/>
   </bar>
</foo>"""

a = BeautifulSoup(file1)
print(a.foo.bar.type["foobar"])
print(a.foo.bar.findAll("type"))

Producción :

u'Hello'
[<type foobar="Hello"></type>, <type foobar="God"></type>]

Beautiful Soup es más rápido que cualquier otra herramienta utilizada para analizar, pero a veces puede ser difícil de entender e implementar este método.

Utilice la biblioteca xmltodict para analizar un documento XML en Python

La biblioteca xmltodict ayuda a que el proceso en archivos XML sea similar al de JSON. También se puede utilizar en el caso de que queramos analizar un archivo XML. El módulo xmltodict se puede utilizar en este caso analizando un archivo XML en un Diccionario ordenado.

La biblioteca xmltodict debe instalarse manualmente y luego importarse al código Python que contiene el archivo XML. La instalación de xmltodict es bastante básica y se puede hacer usando el comando estándar pip.

El siguiente código utiliza la biblioteca xmltodict para analizar un documento XML en Python.

import xmltodict

file1 = """<foo>
             <bar>
                 <type foobar="Hello"/>
                 <type foobar="God"/>
             </bar>
        </foo> """
result = xmltodict.parse(file1)
print(result)

Producción :

OrderedDict([(u'foo', OrderedDict([(u'bar', OrderedDict([(u'type', [OrderedDict([(u'@foobar', u'Hello')]), OrderedDict([(u'@foobar', u'God')])])]))]))])

Utilice la biblioteca lxml para analizar un documento XML en Python

La biblioteca lxml es capaz de proporcionar una API simple pero muy poderosa en Python que se utiliza para analizar archivos XML y HTML. Combina la API ElementTree con libxml2/libxslt.

En palabras más simples, la biblioteca lxml amplía aún más la antigua biblioteca ElementTree para ofrecer soporte para cosas mucho más nuevas como XML Schema, XPath y XSLT.

Aquí, usaremos la biblioteca lxml.objectify. El siguiente código utiliza la biblioteca lxml para analizar un documento XML en Python.

from collections import defaultdict
from lxml import objectify

file1 = """<foo>
                <bar>
                    <type foobar="1"/>
                    <type foobar="2"/>
                </bar>
            </foo>"""

c = defaultdict(int)

root = objectify.fromstring(file1)

for item in root.bar.type:
    c[item.attrib.get("foobar")] += 1

print(dict(c))

Producción :

{'1': 1, '2': 1}

Aquí, en este programa, la variable c se utiliza para almacenar el recuento de cada elemento disponible en un diccionario.

Utilice el módulo untangle para analizar un documento XML en Python

El módulo untangle es un módulo fácil de implementar que se centra en convertir XML en un objeto Python. También se puede instalar fácilmente usando el comando pip. Este módulo funciona con Python 2.7 y superior.

El siguiente código utiliza el módulo untangle para analizar un documento XML en Python.

Archivo XML (sample1.xml):

<foo>
   <bar>
      <type foobar="Hello"/>
   </bar>
</foo>

Código Python:

import untangle

x = untangle.parse("/path_to_xml_file/sample1.xml")
print(x.foo.bar.type["foobar"])

Producción :

Hello

Utilice la biblioteca declxml para analizar un documento XML en Python

La biblioteca declxml, una abreviatura de Procesamiento XML declarativo, se utiliza para proporcionar una API simple para serializar y analizar documentos XML. Esta biblioteca tiene como objetivo reducir la carga de trabajo del programador y reemplazar la necesidad de pasar por grandes y largos trozos de código del requisito de la lógica de análisis cuando se utilizan otras API populares, como minidom o ElementTree.

El módulo declxml se puede instalar fácilmente en el sistema utilizando el comando pip o el comando pipenv. El siguiente código utiliza la biblioteca declxml para analizar un documento XML en Python.

import declxml as xml

xml_string = """
<foo>
   <bar>
      <type foobar="1"/>
      <type foobar="3"/>
      <type foobar="5"/>
   </bar>
</foo>
"""

processor = xml.dictionary(
    "foo", [xml.dictionary("bar", [xml.array(xml.integer("type", attribute="foobar"))])]
)

xml.parse_from_string(processor, xml_string)

Producción :

{'bar': {'foobar': [1, 3, 5]}}

En este método, usamos procesadores para caracterizar declarativamente la estructura del documento XML dado y para mapear entre estructuras de datos XML y Python.

Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

Artículo relacionado - Python XML