Dominando Parsing XML em Python: Guia Prático com Minidom e ElementTree
O que é XML?
XML, ou eXtensible Markup Language, foi criado para armazenar e transportar dados estruturados eficientemente. É amplamente usado para troca de informações entre sistemas e aplicações.
Python fornece bibliotecas robustas para parsear e manipular documentos XML. No entanto, para parsear um arquivo XML, o documento inteiro deve primeiro ser carregado na memória. Neste tutorial demonstraremos como usar os módulos xml.dom.minidom e xml.etree.ElementTree do Python para ler, inspecionar e modificar arquivos XML.
Ao final deste guia você será capaz de:
- Parsear XML com
minidom - Criar novos nós XML
- Parsear XML com
ElementTree
Parseando XML com minidom
Começaremos com um arquivo XML de exemplo contendo dados de funcionários. O arquivo parece assim:
Passo 1) O arquivo lista primeiro nome, último nome, casa e áreas de especialização como SQL, Python, Testing e Business.

Passo 2) Após carregar o documento, imprimiremos o nodeName do elemento raiz e o tagName de seu primeiro filho. Estas são propriedades padrão de um objeto DOM.

- Importe
xml.dom.minidome carregue o arquivo XML (myxml.xml). - Parseie o arquivo com
parse()para obter um objeto documento. - Recupere e exiba o
nodeNamedo documento e otagNamedo primeiro filho. - Use
getElementsByTagName()para listar todos os elementosexpertisee imprima cada habilidade.
Nota: Os valores nodeName e tagName seguem convenções de nomenclatura DOM XML, que podem ser desconhecidas se você é novo em XML.
Passo 3) Podemos extrair uma lista de todas as habilidades do documento. O código a seguir demonstra como reunir os nomes das habilidades em um set.

- Use
getElementsByTagName("skill")para recuperar todos os elementos skill. - Itere sobre a lista retornada e imprima o atributo
namede cada skill.
Criando um Novo Nó XML
Adicionar novos dados a uma estrutura XML existente é simples com minidom. Em nosso exemplo, adicionaremos um novo nó expertise rotulado "BigData".
- Crie o novo elemento com
createElement("expertise")e defina seu atributoname. - Anexe o novo elemento ao filho raiz do documento.

- Após inserção, a lista
expertiseagora inclui a nova habilidade "BigData".
Exemplo de XML Parser
Exemplo Python 2
import xml.dom.minidom
def main():
# Load and parse the XML file
doc = xml.dom.minidom.parse("Myxml.xml")
# Output root information
print doc.nodeName
print doc.firstChild.tagName
# List existing expertise entries
expertise = doc.getElementsByTagName("expertise")
print "%d expertise:" % expertise.length
for skill in expertise:
print skill.getAttribute("name")
# Add a new expertise entry
newexpertise = doc.createElement("expertise")
newexpertise.setAttribute("name", "BigData")
doc.firstChild.appendChild(newexpertise)
print " "
# Verify addition
expertise = doc.getElementsByTagName("expertise")
print "%d expertise:" % expertise.length
for skill in expertise:
print skill.getAttribute("name")
if __name__ == "__main__":
main()
Exemplo Python 3
import xml.dom.minidom
def main():
# Load and parse the XML file
doc = xml.dom.minidom.parse("Myxml.xml")
# Output root information
print(doc.nodeName)
print(doc.firstChild.tagName)
# List existing expertise entries
expertise = doc.getElementsByTagName("expertise")
print("%d expertise:" % expertise.length)
for skill in expertise:
print(skill.getAttribute("name"))
# Add a new expertise entry
newexpertise = doc.createElement("expertise")
newexpertise.setAttribute("name", "BigData")
doc.firstChild.appendChild(newexpertise)
print(" ")
# Verify addition
expertise = doc.getElementsByTagName("expertise")
print("%d expertise:" % expertise.length)
for skill in expertise:
print(skill.getAttribute("name"))
if __name__ == "__main__":
main()
Parseando XML com ElementTree
ElementTree é uma API leve que torna manipulação XML simples e Pythonica. É ideal para ler arquivos XML grandes sem o overhead de um DOM completo.
Nossos dados XML de exemplo:
<data>
<items>
<item name="expertise1">SQL</item>
<item name="expertise2">Python</item>
</items>
</data>
Lendo XML com ElementTree:
Primeiro, importe o módulo:
import xml.etree.ElementTree as ET
Parseie o arquivo e obtenha o elemento raiz:
tree = ET.parse('items.xml')
root = tree.getroot()
Aqui está o código completo para exibir todos os nomes de habilidades:
import xml.etree.ElementTree as ET
tree = ET.parse('items.xml')
root = tree.getroot()
print('Expertise Data:')
for elem in root:
for subelem in elem:
print(subelem.text)
Saída:
Expertise Data: SQL Python
Resumo
Os módulos xml.dom.minidom e xml.etree.ElementTree do Python capacitam desenvolvedores a carregar, analisar e modificar documentos XML eficientemente. Enquanto minidom fornece representação DOM completa adequada para manipulações complexas, ElementTree oferece alternativa leve para parsing e extração diretas.
- Carregue XML com
parse()(ex:doc = xml.dom.minidom.parse(file)). - Use
getElementsByTagName()para recuperar elementos. - Crie e anexe novos nós com
createElement()eappendChild(). - Com ElementTree, simplesmente itere sobre elementos filhos para acessar dados.
python
- Python File I/O: Dominando Operações de Arquivo, Leitura, Escrita e Gerenciamento
- Lendo Arquivos em Java com BufferedReader – Guia Prático com Exemplos
- Dominando o Método strip() do Python: Guia Completo e Exemplos Práticos
- Python len(): Guia Prático para Medir Comprimento de Objetos
- Dominando o yield do Python: Generator vs Return – Guia Prático
- Counter do Python em collections: Contagem Eficiente, Atualização e Operações Aritméticas
- Dominando enumerate() do Python: Loop com Índices para Listas, Tuplas, Strings e Dicionários
- Verificando Existência de Arquivos e Diretórios em Python – Guia Prático
- Python JSON: Codificação, Decodificação e Manipulação de Arquivos – Guia Prático
- Python List index(): Como Encontrar Posições de Elementos com Exemplos Práticos