Crie um analisador XML em Python
-
Use a API
ElementTree
para analisar um documento XML em Python -
Use o módulo
minidom
para analisar um documento XML em Python -
Use a biblioteca
Beautiful Soup
para analisar um documento XML em Python -
Use a biblioteca
xmltodict
para analisar um documento XML em Python -
Use a biblioteca
lxml
para analisar um documento XML em Python -
Use o módulo
untangle
para analisar um documento XML em Python -
Use a biblioteca
declxml
para analisar um documento XML em Python
XML é uma abreviatura de eXtensible Markup Language e é uma linguagem autodescritiva utilizada para armazenar e transportar dados. Python fornece um meio para análise e modificação de um documento XML.
Este tutorial enfoca e demonstra diferentes métodos para analisar um documento XML em Python.
Use a API ElementTree
para analisar um documento XML em Python
O módulo xml.etree.ElementTree
é utilizado para gerar uma API eficiente, porém simples, para analisar o documento XML e criar dados XML.
O código a seguir usa o módulo xml.etree.ElementTree
para analisar um documento XML em 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"))
Produção:
Hello
God
Aqui, passamos os dados XML como uma string entre aspas triplas. Também podemos importar um documento XML real com a ajuda da função parse()
do módulo ElementTree
.
O módulo cElementTree
foi a implementação em C da API ElementTree
, com a única diferença de que cElementTree
é otimizado. Com isso dito, ele pode analisar cerca de 15-20 vezes mais rápido do que o módulo ElementTree
e usa uma quantidade muito baixa de memória.
No entanto, no Python 3.3 e acima, o módulo cElementTree
foi descontinuado e o módulo ElementTree
usa uma implementação mais rápida.
Use o módulo minidom
para analisar um documento XML em Python
O xml.dom.minidom
pode ser definido como uma implementação básica da interface Document Object Model (DOM). Todos os aplicativos DOM geralmente começam com a análise de um objeto XML. Portanto, esse método é o método mais rápido para analisar um documento XML em Python.
O código a seguir usa a função parse()
do módulo minidom
para analisar um documento XML em Python.
Arquivo 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)
Produção:
2
Hello
God
Este módulo também permite que o XML seja passado como uma string, semelhante à API ElementTree
. No entanto, ele usa a função parseString()
para fazer isso.
Ambos os módulos xml.etree.ElementTree
e xml.dom.minidom
são considerados não seguros contra dados construídos de forma maliciosa.
Use a biblioteca Beautiful Soup
para analisar um documento XML em Python
A biblioteca Beautiful Soup
é projetada para projetos de web scraping e extrair os dados de arquivos XML
e HTML
. Beautiful Soup
é muito rápido e pode analisar qualquer coisa que encontrar.
Essa biblioteca faz até mesmo o processo de travessia da árvore para o programa e analisa o documento XML. Além disso, Beautiful Soup
também é usado para embelezar o código-fonte fornecido.
A biblioteca Beautiful Soup
precisa ser instalada manualmente e, em seguida, importada para o código Python para este método. Esta biblioteca pode ser instalada usando o comando pip
. A biblioteca Beautiful Soup 4
, que é a versão mais recente, funciona em Python 2.7 e superior.
O código a seguir usa a biblioteca Beautiful Soup
para analisar um documento XML em 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"))
Produção:
u'Hello'
[<type foobar="Hello"></type>, <type foobar="God"></type>]
Beautiful Soup
é mais rápido do que qualquer outra ferramenta usada para análise, mas pode ser difícil de entender e implementar esse método às vezes.
Use a biblioteca xmltodict
para analisar um documento XML em Python
A biblioteca xmltodict
ajuda a tornar o processo em arquivos XML semelhante ao de JSON. Também pode ser usado no caso em que queremos analisar um arquivo XML. O módulo xmltodict
pode ser utilizado neste caso, analisando um arquivo XML em um Dicionário Ordenado
.
A biblioteca xmltodict
precisa ser instalada manualmente e, em seguida, importada para o código Python que contém o arquivo XML. A instalação de xmltodict
é bastante básica e pode ser feita usando o comando pip
padrão.
O código a seguir usa a biblioteca xmltodict
para analisar um documento XML em Python.
import xmltodict
file1 = """<foo>
<bar>
<type foobar="Hello"/>
<type foobar="God"/>
</bar>
</foo> """
result = xmltodict.parse(file1)
print(result)
Produção:
OrderedDict([(u'foo', OrderedDict([(u'bar', OrderedDict([(u'type', [OrderedDict([(u'@foobar', u'Hello')]), OrderedDict([(u'@foobar', u'God')])])]))]))])
Use a biblioteca lxml
para analisar um documento XML em Python
A biblioteca lxml
é capaz de fornecer uma API simples, mas muito poderosa em Python, usada para analisar arquivos XML e HTML. Ele combina a API ElementTree
com libxml2/libxslt
.
Em palavras mais simples, a biblioteca lxml
estende ainda mais a antiga biblioteca ElementTree
para oferecer suporte para coisas muito mais novas, como XML Schema, XPath e XSLT.
Aqui, usaremos a biblioteca lxml.objectify
. O código a seguir usa a biblioteca lxml
para analisar um documento XML em 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))
Produção:
{'1': 1, '2': 1}
Aqui, neste programa, a variável c
é usada para armazenar a contagem de cada item disponível em um dicionário.
Use o módulo untangle
para analisar um documento XML em Python
O módulo untangle
é um módulo fácil de implementar que se concentra na conversão de XML em um objeto Python. Ele também pode ser facilmente instalado usando o comando pip
. Este módulo funciona com Python 2.7 e superior.
O código a seguir usa o módulo untangle
para analisar um documento XML em Python.
Arquivo 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"])
Produção:
Hello
Use a biblioteca declxml
para analisar um documento XML em Python
A biblioteca declxml
, uma abreviatura de Processamento XML Declarativo, é utilizada para fornecer uma API simples para serializar e analisar documentos XML. Esta biblioteca visa reduzir a carga de trabalho do programador e substituir a necessidade de passar por grandes e longos blocos de código do requisito de lógica de análise ao usar outras APIs populares, como minidom
ou ElementTree
.
O módulo declxml
pode ser instalado facilmente no sistema usando o comando pip
ou pipenv
. O código a seguir usa a biblioteca declxml
para analisar um documento XML em 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)
Produção:
{'bar': {'foobar': [1, 3, 5]}}
Neste método, usamos processadores para caracterizar declarativamente a estrutura do documento XML fornecido e para mapear entre as estruturas de dados XML e 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