Crie um analisador XML em Python

Vaibhhav Khetarpal 10 outubro 2023
  1. Use a API ElementTree para analisar um documento XML em Python
  2. Use o módulo minidom para analisar um documento XML em Python
  3. Use a biblioteca Beautiful Soup para analisar um documento XML em Python
  4. Use a biblioteca xmltodict para analisar um documento XML em Python
  5. Use a biblioteca lxml para analisar um documento XML em Python
  6. Use o módulo untangle para analisar um documento XML em Python
  7. Use a biblioteca declxml para analisar um documento XML em Python
Crie um analisador 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 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

Artigo relacionado - Python XML