Crear un analizador XML en Python
-
Utilice la API
ElementTree
para analizar un documento XML en Python -
Utilice el módulo
minidom
para analizar un documento XML en Python -
Utilice la biblioteca
Beautiful Soup
para analizar un documento XML en Python -
Utilice la biblioteca
xmltodict
para analizar un documento XML en Python -
Utilice la biblioteca
lxml
para analizar un documento XML en Python -
Utilice el módulo
untangle
para analizar un documento XML en Python -
Utilice la biblioteca
declxml
para analizar un documento 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 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