Convertir XML en dictionnaire en Python

Hemank Mehtani 30 janvier 2023
  1. Utilisez le module xmltodict pour convertir une chaîne XML en un dictionnaire en Python
  2. Utilisez la bibliothèque cElemenTree pour convertir une chaîne XML en dictionnaire en Python
Convertir XML en dictionnaire en Python

XML est connu sous le nom de langage de balisage extensible. Il est utilisé pour stocker et transporter des quantités de données petites à moyennes, et il est également largement utilisé pour partager des informations structurées. Python nous permet d’analyser et de modifier les documents XML.

Dans ce tutoriel, nous montrerons comment convertir une chaîne XML en un dictionnaire en Python.

Utilisez le module xmltodict pour convertir une chaîne XML en un dictionnaire en Python

xmltodict est un module en Python qui donne l’impression que le travail avec XML ressemble à JSON. En raison de la structure de XML, il peut être facilement converti en dictionnaire à l’aide de ce module.

Voir l’extrait de code ci-dessous.

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)

Production:

OrderedDict([('student', OrderedDict([('id', 'DEL'), ('name', 'Jack'), ('email', 'jack@example.com'), ('smeseter', '8'), ('class', 'CSE'), ('cgpa', '7.5')]))])

Ici, nous pouvons voir que le résultat est sous la forme d’un dictionnaire ordonné. Un dictionnaire ordonné préserve l’ordre des paires clé-valeur dans un dictionnaire. La fonction parse() analyse ici les données XML dans un dictionnaire ordonné.

Utilisez la bibliothèque cElemenTree pour convertir une chaîne XML en dictionnaire en Python

cElementTree est une bibliothèque Python essentielle nous permettant d’analyser et de parcourir un document XML. Avec cElementTree, nous pouvons décomposer le document XML en une structure arborescente avec laquelle il est facile de travailler.

Nous allons créer notre propre fonction pour analyser les données XML et les convertir en dictionnaire. Nous utiliserons un objet de classe deafultdict du module collections pour obtenir le résultat final sous la forme souhaitée.

Voir le code suivant.

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)

Production:

{'student': {'id': 'DEL', 'name': 'Jack', 'email': 'jack@example.com', 'smeseter': '8', 'class': 'CSE', 'cgpa': '7.5'}}

Notez qu’il s’agit d’une arborescence d’un dictionnaire. Notez que le dictionnaire final est généralement un dictionnaire imbriqué dans les deux méthodes. Cela est dû à la structure du XML.

Article connexe - Python Dictionary

Article connexe - Python XML