Créer un analyseur XML en Python
-
Utilisez l’API
ElementTree
pour analyser un document XML en Python -
Utiliser le module
minidom
pour analyser un document XML en Python -
Utilisez la bibliothèque
Beautiful Soup
pour analyser un document XML en Python -
Utiliser la bibliothèque
xmltodict
pour analyser un document XML en Python -
Utilisez la bibliothèque
lxml
pour analyser un document XML en Python -
Utilisez le module
untangle
pour analyser un document XML en Python -
Utiliser la bibliothèque
declxml
pour analyser un document 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 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