Converter XML em dicionário em Python
-
Use o módulo
xmltodict
para converter string XML em um dicionário em Python -
Use a biblioteca
cElemenTree
para converter string XML em dicionário em Python
XML é conhecido como Extensible Markup Language. É usado para armazenar e transportar pequenas a médias quantidades de dados e também é amplamente usado para compartilhar informações estruturadas. Python nos permite analisar e modificar os documentos XML.
Neste tutorial, demonstraremos como converter string XML em um dicionário em Python.
Use o módulo xmltodict
para converter string XML em um dicionário em Python
xmltodict
é um módulo em Python que faz o trabalho com XML parecer JSON. Devido à estrutura do XML, ele pode ser facilmente convertido em um dicionário usando este módulo.
Veja o trecho de código abaixo.
import xmltodict
xml_data = """
<student>
<id>DEL</id>
<name> Jack </name>
<email>jack@example.com</email>
<smeseter>8</smeseter>
<class>CSE</class>
<cgpa> 7.5</cgpa>
</student>
"""
d = xmltodict.parse(xml_data)
print(d)
Resultado:
OrderedDict([('student', OrderedDict([('id', 'DEL'), ('name', 'Jack'), ('email', 'jack@example.com'), ('smeseter', '8'), ('class', 'CSE'), ('cgpa', '7.5')]))])
Aqui, podemos ver que o resultado está na forma de um dicionário ordenado. Um dicionário ordenado preserva a ordem dos pares de valores-chave em um dicionário. A função parse()
aqui analisa os dados XML em um dicionário ordenado.
Use a biblioteca cElemenTree
para converter string XML em dicionário em Python
cElementTree
é uma biblioteca Python essencial que nos permite analisar e navegar em um documento XML. Com cElementTree
, podemos dividir o documento XML em uma estrutura de árvore fácil de trabalhar.
Criaremos nossa própria função para analisar os dados XML e convertê-los em um dicionário. Usaremos um objeto de classe deafultdict
do módulo collections
para obter o resultado final em nossa forma desejada.
Veja o seguinte código.
from collections import defaultdict
from xml.etree import cElementTree as ET
def xml2dict(t):
d = {t.tag: {} if t.attrib else None}
children = list(t)
if children:
dd = defaultdict(list)
for dc in map(etree_to_dict, children):
for k, v in dc.items():
dd[k].append(v)
d = {t.tag: {k: v[0] if len(v) == 1 else v for k, v in dd.items()}}
if t.attrib:
d[t.tag].update(("@" + k, v) for k, v in t.attrib.items())
if t.text:
text = t.text.strip()
if children or t.attrib:
if text:
d[t.tag]["#text"] = text
else:
d[t.tag] = text
return d
xml_data = ET.XML(
"""
<student>
<id>DEL</id>
<name> Jack </name>
<email>jack@example.com</email>
<smeseter>8</smeseter>
<class>CSE</class>
<cgpa> 7.5</cgpa>
</student>
"""
)
d = xml2dict(xml_data)
print(d)
Resultado:
{'student': {'id': 'DEL', 'name': 'Jack', 'email': 'jack@example.com', 'smeseter': '8', 'class': 'CSE', 'cgpa': '7.5'}}
Observe que esta é uma estrutura em árvore de um dicionário. Observe que o dicionário final geralmente é um dicionário aninhado em ambos os métodos. Isso se deve à estrutura do XML.
Artigo relacionado - Python Dictionary
- Como verificar se uma chave existe em um dicionário em Python
- Converter um dicionário em uma lista em Python
- Como obter todos os arquivos de um diretório
- Encontrar o Valor Máximo no Dicionário Python
- Como Ordenar um Dicionário Python por Valor
- Como fundir dois dicionários em Python 2 e 3