INTRODUÇÃO
Esse artigo tem como proposta abordar o tema de manipulação de arquivos XML, passando por várias possibilidades de interação, indo desde bibliotecas como beautiful soup e element tree, a opções que trazem uma melhor dinâmica.
O XML, ou "Extensible Markup Language" (Linguagem de Marcação Extensível) tem suas origens na década de 70, no qual tem como seu ancestral o GML, ou “Geography Markup Language” (Linguagem de marcação geográfica), que foi criado com o objetivo de armazenar maiores quantidades de informações, esse modelo foi padronizado pela ISO em meados de 1986, Surgindo a SGML, mostrando que o código GML poderia ser mais versátil e poderoso.
Exemplo de código GML:
Pouco tempo depois, em 1989 surgiu o popular HTML (Hypertext Markup Language - linguagem de marcação de hipertexto), derivado do XML, a linguagem é uma das mais usadas do mundo por ser utilizada na criação de sites, em 1994 a W3C³ (world wide web consortium - consórcio da www) resolveu formalizar as regras do HTML, e como ele não cumpriu tudo que propunha, o XML surge em 1996 com o objetivo de transacionar dados de forma dinâmica e organizada, tornando-se um dos tipos de linguagem mais populares do inicio do século XXI.
Mais tarde, surgiram diversas variações do XML, não citaremos aqui, mas seguirão abaixo como exemplo na imagem:
Obs: Para complementar, o json surgiu como uma alternativa ao XML no início dos anos 2000, e hoje em dia pode se dizer que ele e outros tipos de arquivos ajudaram a levar o XML ao caminho do desuso, por maior facilidade de interação com os dados, o método de tag’s acabou sendo menos atraente, mas a linguagem ainda é muito utilizada por diversos sistemas.
Para finalmente caminharmos com os códigos e exemplos, vamos explanar melhor o que é o XML, ele é uma linguagem formada por tag’s, muito utilizada por maquinários e muitos sites de prefeituras, para integração de notas fiscais por exemplo. Cada tag contém uma pequena informação que será útil para analise, podendo ter namespaces (um subtítulo de tag), tag’s repetidas (o que não ajuda ao analisar esse tipo de documento) e entre outros objetos.
MANIPULAÇÃO
Finalmente, vamos ao que interessa e ver como o XML consegue interagir com o python, a fim de gerar valor aos dados que ele armazena. Para isso, vamos aos tópicos:
Element Tree:
Element tree é uma biblioteca python padrão, para análise e manipulação de arquivos XML, com ela é possível criar, ler e manipular o arquivo, além disso ela tem diversos métodos e classes que facilitam sua utilização, além de sua extensa documentação.
Exemplo de código python com element tree:
<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>
#Lendo o arquivo
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
#Imprimindo os objetos
for child in root:
print(child.tag, child.attrib)
country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}
#navegando aos itens com index
root[0][1].text
'2008'
Beautiful Soup:
Beautiful Soup é uma biblioteca Python para análise de dados HTML e XML. Ele fornece uma interface de alto nível para extrair informações de páginas da web e outros documentos estruturados.
Com Beautiful Soup, você pode analisar documentos HTML e XML e extrair informações específicas do documento, como tags, atributos e conteúdo de texto. Você também pode navegar pela estrutura do documento, acessando facilmente os elementos pai, filho e irmão.
De modo geral, ela é bem similar ao seu funcionamento e sintaxes em relação ao element tree, se você precisa trabalhar principalmente com documentos XML, element tree pode ser uma escolha mais adequada. Se você precisa trabalhar, ou está mais adaptado com documentos HTML(principalmente) e XML e precisa de uma API fácil de usar para navegação e extração de dados, Beautiful Soup pode ser uma melhor escolha.
xmltodict:
xmltodict na minha opinião é uma grande alternativa se você deseja acelerar sua análise dos dados e não necessita se aprofundar demais nas tag’s, essa biblioteca é capaz de ler os XML e já estrutura-los em objetos python com dicionários e listas, agilizando o acesso ao dado para seguir com os próximos passos do projeto, ou até mesmo transformar objetos python em XML, ela também traz essa possibilidade.
Criando o objeto python com xml:
Criando o arquivo xml a partir de um objeto python:
Existem diversas outras maneiras de manipular esse tipo de arquivo, mas trouxemos as mais populares para facilitar sua decisão, e, para agregar ainda mais ao conhecimento, teremos abaixo um caso de uso encontrado em um ambiente produtivo, no qual tínhamos arquivos XML, mas não era possível acessar os mesmos via python, por configurações do ambiente e dificuldades da liberação com o cliente, então tivemos de encontrar uma medida paliativa, por estarmos em um ambiente de cloud azure, convertemos o arquivo XML para parquet, através do integrate do Azure synapse pipelines, lemos esses arquivos parquet com o spark, através de um objeto dataframe, no qual recebia duas colunas, uma contendo a chave de nota fiscal coletada em separado do xml para identificar a nota fiscal, e a outra coluna uma string com todo o restante das tag’s já transformadas em uma sintaxe json, e com isso, através do método json.loads(), transformamos essa string em um objeto python, e depois seguimos com as devidas transformações. Segue código:
Primeiro ocorre a leitura do dataframe no arquivo parquet:
Depois podemos ver a transformação desse dataframe em listas, nas quais são coletadas as strings e carregadas como objetos python no final:
E assim, temos como resultado a seguinte lista:
CONCLUSÃO
Arquivos XML foram revolucionários quando surgiram e ainda tem grande importância, porém suas limitações vêm atrapalhando com as atuais necessidades no mercado de dados, pois apresentam maiores dificuldades quando precisamos acessa-lo, manipula-lo, mas é extremamente importante que saibamos lidar com ele quando necessário, então ainda é um importante objeto de estudo.