Python vous permet de lire, écrire, modifier et d’analyser des fichiers XML. XML est un langage qui a été conçu pour être à la fois lisible par l’homme et par la machine.

fichiers xml

Python fournit de nombreuses bibliothèques pour analyser, explorer, modifier et remplir des fichiers XML. Extensible Markup Language, est un langage de balisage qui permet de structurer, stocker et transférer des données.

XML crée une structure arborescente selon une hiérarchie facile à interpréter. En fait, un document XML est divisé en sections, appelées éléments, contenus entre une balise de début et de fin. Une balise est une construction de balisage qui commence par le signe < et se termine par le signe >. De plus, les éléments peuvent contenir d’autres éléments, appelés des éléments enfants.

On appel l’élément de niveau supérieur, la racine, qui contient tous les autres éléments. Les attributs sont des paires nom-valeur dan un élément.

Nous avons une balise ouvrante et une autre fermante, que vous pouvez également trouver en langage html :

<une balise ouvrante> # élément racine
  <un élément enfant> nom = valeur </un élément enfant>
  <un autre élément> nom = valeur </un autre élément>
</une balise fermante>

Prenons un fichier data.xml

<?xml version="1.0" encoding="UTF-8"?>

<info>
    <items>
        <item name="item1">1</item>
        <item name="item2">2</item>
        <item name="item3">3</item>
        <item name="item4">4</item>
    </items>
</info>

Le module XML Python prend en charge deux sous-modules minidom et ElementTree pour analyser un fichier XML.

Le module minidom

Le module minidom ou Minimal DOM fournit une structure de type DOM (Document Object Model) pour analyser un fichier XML.

DOM : modèle d’objet de document, c’est le principe d’arborescence qu’on a expliqué précédemment, avec une racine et des éléments, se trouvant à l’intérieur de balises.

minidom possède une fonction parse() qui permet de lire un fichier XML. Nous devons d’abord l’importer.

xml.dom.minidom.parse(fichier)

fichier : le nom du fichier ou son chemin.

Affichons le nom de l’élément enfant et le nom de noeud du fichier XML.

from xml.dom import minidom

doc = minidom.parse('data.xml')

print(doc.nodeName)
print(doc.firstChild.tagName)

Récupérer le nom de la balise avec la fonction getElementsByTagName et les attributs avec getAttribute .

from xml.dom import minidom

doc = minidom.parse('data.xml')

elements = doc.getElementsByTagName("item")
print(f"Nous avons {elements.length} éléments")
for i in elements:
    print(i.getAttribute("name"))

Ce qui nous donne.

Nous avons 4 éléments
item1
item2
item3
item4

Le module ElementTree

Bien que nous puissions analyser un document XML en utilisant minidom, mais ElementTree fournit une façon Pythonic pour analyser un fichier XML.

import xml.etree.ElementTree as et

# analyser le fichier XML
doc = et.parse('data.xml')
# obtenir l'élément racine
root = doc.getroot()
print(root)

La méthode getroot() est utilisée pour récupérer l’élément racine du fichier XML.

fromstring() – analyse le fichier XML fourni en tant que paramètre chaîne de caractères.

Voyons comment cela fonctionne avec le code suivant.

import xml.etree.ElementTree as et

# définir la chaine de caractères
xml_data = '''<infos>
        <item name="item1">1</item>
        <item name="item2">2</item>
        <item name="item3">3</item>
        <item name="item4">4</item>
</infos>'''

# analyser la chaine de caractères
root = et.fromstring(xml_data)

# récupérer l'élément racine
print(root.tag)
  • Nous avons défini une variable qui stocke la chaîne XML qui sera analysée à l’aide de la méthode fromstring().
  • Spécifier la chaine de caractère entre triples guillemets.
  • Appeler la méthode formstring() et passer la variable qui stocke la chaine de caractère en tant que paramètre.

Rechercher des éléments à partir de documents XML

Nous allons découvrir comment trouver des éléments en fonction de ce que vous voulez savoir. Vous pouvez trouver divers éléments et sous-éléments en utilisant la balise, l’attribut, le texte, etc.

Voici notre nouveau contenu du fichier data.xml.

<?xml version="1.0" encoding="UTF-8"?>

<produit>
    <Software >
        <item nom="ABC">Convertisseur PDF</item>
        <prix>100</prix>
        <version>1.2</version>
    </Software>
    <Hardware >
        <item nom="XYZ">Clavier</item>
        <prix>20</prix>
        <garantie>2 ans</garantie>
    </Hardware>
 
</produit>

Rechercher un élément d’une balise.

import xml.etree.ElementTree as et

my_tree = et.parse('data.xml')
my_root = my_tree.getroot()
print("L'élément racine : ", my_root.tag)

# la balise du premier enfant de l'élément racine
print("Le premier enfant de la racine : ", my_root[0].tag)

# afficher toutes les balises
print("\nLes balise sont : ")
for a in my_root[0]:
    print(a.tag)

L’exécution du code.

L'élément racine :  produit
Le premier enfant de la racine :  Software

Les balise sont : 
item
prix
version

Rechercher l’attribut d’un élément.

import xml.etree.ElementTree as et

my_tree = et.parse('data.xml')
my_root = my_tree.getroot()

print("Le premier élément enfant :", my_root[0].tag)

# Les attributs du premier élément enfant
print("\nTous les attributs du premier élément enfant: ")
for a in my_root[0]:
    print(a.attrib)

L’exécution du code.

Le premier élément enfant : Software

Tous les attributs : 
{'nom': 'ABC'}
{}
{}

Rechercher un élément texte.

Si vous voulez trouver des éléments de texte dans un fichier données XML, écrivez le code suivant.

import xml.etree.ElementTree as et

my_tree = et.parse('data.xml')
my_root = my_tree.getroot()

# afficher tous les textes
print("\nLes textes du premier sub-élément : ")
for a in my_root[0]:
    print(a.text)

print("\nLes textes du second sub-élément : ")
for a in my_root[1]:
    print(a.text)

L’exécution du code.

Les textes du premier sub-élément : 
Convertisseur PDF
100
1.2

Les textes du second sub-élément : 
Clavier
20
2 ans

J’espère que vous avez trouvé cet article utile et que vous avez appris comment analyser des données XML.

Catégories : Non classé

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *