Créer un analyseur XML en Python

Vaibhhav Khetarpal 10 octobre 2023
  1. Utilisez l’API ElementTree pour analyser un document XML en Python
  2. Utiliser le module minidom pour analyser un document XML en Python
  3. Utilisez la bibliothèque Beautiful Soup pour analyser un document XML en Python
  4. Utiliser la bibliothèque xmltodict pour analyser un document XML en Python
  5. Utilisez la bibliothèque lxml pour analyser un document XML en Python
  6. Utilisez le module untangle pour analyser un document XML en Python
  7. Utiliser la bibliothèque declxml pour analyser un document XML en Python
Créer un analyseur XML en Python

XML est l’abréviation de eXtensible Markup Language et est un langage autodescriptif utilisé pour stocker et transporter des données. Python fournit un support pour l’analyse et la modification d’un document XML.

Ce didacticiel se concentre sur et démontre différentes méthodes pour analyser un document XML en Python.

Utilisez l’API ElementTree pour analyser un document XML en Python

Le module xml.etree.ElementTree est utilisé pour générer une API simple mais efficace pour analyser le document XML et créer des données XML.

Le code suivant utilise le module xml.etree.ElementTree pour analyser un document XML en 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"))

Production:

Hello
God

Ici, nous passons les données XML sous forme de chaîne entre guillemets triples. Nous pouvons également importer un document XML réel à l’aide de la fonction parse() du module ElementTree.

Le module cElementTree était l’implémentation en C de l’API ElementTree, à la seule différence que cElementTree est optimisé. Cela étant dit, il peut analyser environ 15 à 20 fois plus rapidement que le module ElementTree et utilise une très faible quantité de mémoire.

Cependant, dans Python 3.3 et supérieur, le module cElementTree a été déprécié et le module ElementTree utilise une implémentation plus rapide.

Utiliser le module minidom pour analyser un document XML en Python

Le xml.dom.minidom peut être défini comme une implémentation de base de l’interface Document Object Model (DOM). Toutes les applications DOM commencent généralement par l’analyse d’un objet XML. Par conséquent, cette méthode est la méthode la plus rapide pour analyser un document XML en Python.

Le code suivant utilise la fonction parse() du module minidom pour analyser un document XML en Python.

Fichier XML (sample1.xml) :

<data>
    <strings>
        <string name="Hello"></string>
        <string name="God"></string>
    </strings>
</data>

Code 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)

Production:

2
Hello
God

Ce module permet également de passer le XML sous forme de chaîne, similaire à l’API ElementTree. Cependant, il utilise la fonction parseString() pour y parvenir.

Les modules xml.etree.ElementTree et xml.dom.minidom ne sont pas sûrs contre les données construites de manière malveillante.

Utilisez la bibliothèque Beautiful Soup pour analyser un document XML en Python

La bibliothèque Beautiful Soup est conçue pour les projets de grattage Web et l’extraction des données des fichiers XML et HTML. Beautiful Soup est très rapide et peut analyser tout ce qu’il rencontre.

Cette bibliothèque effectue même le processus de traversée de l’arborescence pour le programme et analyse le document XML. De plus, Beautiful Soup est également utilisé pour embellir le code source donné.

La bibliothèque Beautiful Soup doit être installée manuellement puis importée dans le code Python pour cette méthode. Cette bibliothèque peut être installée à l’aide de la commande pip. La bibliothèque Beautiful Soup 4, qui est la dernière version, fonctionne sur Python 2.7 et supérieur.

Le code suivant utilise la bibliothèque Beautiful Soup pour analyser un document XML en 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"))

Production:

u'Hello'
[<type foobar="Hello"></type>, <type foobar="God"></type>]

Beautiful Soup est plus rapide que tout autre outil utilisé pour l’analyse, mais il peut parfois être difficile de comprendre et d’implémenter cette méthode.

Utiliser la bibliothèque xmltodict pour analyser un document XML en Python

La bibliothèque xmltodict aide à rendre le processus sur les fichiers XML similaire à celui de JSON. Il peut également être utilisé dans le cas où l’on souhaite analyser un fichier XML. Le module xmltodict peut être utilisé dans ce cas en analysant un fichier XML en un dictionnaire ordonné.

La bibliothèque xmltodict doit être installée manuellement puis importée dans le code Python qui contient le fichier XML. L’installation de xmltodict est assez basique et peut être effectuée à l’aide de la commande standard pip.

Le code suivant utilise la bibliothèque xmltodict pour analyser un document XML en Python.

import xmltodict

file1 = """<foo>
             <bar>
                 <type foobar="Hello"/>
                 <type foobar="God"/>
             </bar>
        </foo> """
result = xmltodict.parse(file1)
print(result)

Production:

OrderedDict([(u'foo', OrderedDict([(u'bar', OrderedDict([(u'type', [OrderedDict([(u'@foobar', u'Hello')]), OrderedDict([(u'@foobar', u'God')])])]))]))])

Utilisez la bibliothèque lxml pour analyser un document XML en Python

La bibliothèque lxml est capable de fournir une API simple mais très puissante en Python utilisée pour analyser les fichiers XML et HTML. Il combine l’API ElementTree avec libxml2/libxslt.

En termes plus simples, la bibliothèque lxml étend encore l’ancienne bibliothèque ElementTree pour offrir un support pour des choses beaucoup plus récentes comme XML Schema, XPath et XSLT.

Ici, nous utiliserons la bibliothèque lxml.objectify. Le code suivant utilise la bibliothèque lxml pour analyser un document XML en 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))

Production:

{'1': 1, '2': 1}

Ici, dans ce programme, la variable c est utilisée pour stocker le compte de chaque élément disponible dans un dictionnaire.

Utilisez le module untangle pour analyser un document XML en Python

Le module untangle est un module facile à mettre en œuvre qui se concentre sur la conversion de XML en un objet Python. Il peut également être facilement installé à l’aide de la commande pip. Ce module fonctionne avec Python 2.7 et supérieur.

Le code suivant utilise le module untangle pour analyser un document XML en Python.

Fichier XML (sample1.xml) :

<foo>
   <bar>
      <type foobar="Hello"/>
   </bar>
</foo>

Code Python :

import untangle

x = untangle.parse("/path_to_xml_file/sample1.xml")
print(x.foo.bar.type["foobar"])

Production:

Hello

Utiliser la bibliothèque declxml pour analyser un document XML en Python

La bibliothèque declxml, abréviation de Declarative XML Processing, est utilisée pour fournir une API simple pour sérialiser et analyser des documents XML. Cette bibliothèque vise à réduire la charge de travail du programmeur et à remplacer le besoin de parcourir de gros et longs morceaux de code de la logique d’analyse requise lors de l’utilisation d’autres API populaires, telles que minidom ou ElementTree.

Le module declxml peut être installé facilement dans le système en utilisant la commande pip ou pipenv. Le code suivant utilise la bibliothèque declxml pour analyser un document XML en 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)

Production:

{'bar': {'foobar': [1, 3, 5]}}

Dans cette méthode, nous utilisons des processeurs pour caractériser de manière déclarative la structure du document XML donné et pour le mappage entre les structures de données XML et 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

Article connexe - Python XML