Python - Traitement XML
Bonjour à tous, aspirants programmeurs ! Aujourd'hui, nous plongeons dans le monde fascinant du traitement XML avec Python. En tant que votre enseignant de sciences informatiques de quartier, je suis excité de vous guider à travers ce voyage. Alors, prenez une tasse de votre boisson préférée, et c'est parti !
Qu'est-ce qu'XML ?
Avant de plonger dans la partie codage, voyons ce qu'est vraiment XML. XML signifie eXtensible Markup Language (Langage de balisage extensible). C'est un cousin de HTML, mais avec un objectif différent. Alors que HTML est utilisé pour afficher des données, XML est utilisé pour stocker et transporter des données.
Imaginez XML comme une manière d'organiser des informations sous une structure en arbre. Il utilise des balises (comme <tag>
) pour définir des éléments, similairement à la manière dont vous organiseriez des fichiers dans des dossiers sur votre ordinateur.
Voici un exemple simple d'XML :
<bookstore>
<book>
<title>Harry Potter</title>
<author>J.K. Rowling</author>
<year>1997</year>
</book>
</bookstore>
Dans cet exemple, nous avons une bookstore qui contient des informations sur un livre. Le livre a un titre, un auteur et une année de publication. Très simple, non ?
Architectures et API de traitement XML
Maintenant que nous savons ce qu'est XML, parlons de la manière dont nous pouvons travailler avec dans Python. Python fournit plusieurs moyens de parser (lire et interpréter) des données XML. Les trois approches principales sont :
- SAX (Simple API for XML)
- DOM (Document Object Model)
- ElementTree
Chacune de ces méthodes a ses propres avantages et cas d'utilisation. Explorons-les une par une !
Analyse XML avec les API SAX
SAX, ou Simple API for XML, est un analyseur événementiel. Il lit le fichier XML de manière séquentielle et déclenche des événements lorsqu'il rencontre des éléments, des attributs ou du texte.
Voici un exemple simple d'utilisation de SAX en Python :
import xml.sax
class BookHandler(xml.sax.ContentHandler):
def startElement(self, name, attrs):
self.current = name
def characters(self, content):
if self.current == "title":
print(f"Titre du livre : {content}")
handler = BookHandler()
parser = xml.sax.make_parser()
parser.setContentHandler(handler)
parser.parse("books.xml")
Dans cet exemple, nous créons une classe BookHandler
qui définit ce qu'il faut faire lorsque l'analyseur rencontre différentes parties du XML. Lorsqu'il trouve un élément "title", il affiche le titre.
Analyse XML avec les API DOM
DOM, ou Document Object Model, charge tout le document XML en mémoire et le représente sous la forme d'une structure en arbre. Cela vous permet de naviguer et de modifier le document facilement.
Voici comment vous pourriez utiliser DOM en Python :
import xml.dom.minidom
doc = xml.dom.minidom.parse("books.xml")
titles = doc.getElementsByTagName("title")
for title in titles:
print(f"Titre du livre : {title.firstChild.data}")
Ce code analyse le fichier XML, trouve tous les éléments "title" et affiche leur contenu.
API XML ElementTree
ElementTree est une manière plus légère et plus pythonique de travailler avec XML. Il est souvent le choix préféré de nombreux développeurs Python en raison de sa simplicité et de son efficacité.
Voici un exemple utilisant ElementTree :
import xml.etree.ElementTree as ET
tree = ET.parse("books.xml")
root = tree.getroot()
for book in root.findall("book"):
title = book.find("title").text
print(f"Titre du livre : {title}")
Ce code fait la même chose que nos exemples précédents, mais de manière plus directe.
Créer un fichier XML
Maintenant, essayons de créer un fichier XML à partir de zéro en utilisant ElementTree :
import xml.etree.ElementTree as ET
root = ET.Element("bookstore")
book = ET.SubElement(root, "book")
ET.SubElement(book, "title").text = "Le Guide du voyageur galactique"
ET.SubElement(book, "author").text = "Douglas Adams"
ET.SubElement(book, "year").text = "1979"
tree = ET.ElementTree(root)
tree.write("new_books.xml")
Ce script crée un nouveau fichier XML avec une entrée de livre. C'est comme être un auteur, mais au lieu d'écrire un livre, vous écrivez XML !
Analyser un fichier XML
Nous avons déjà vu des exemples d'analyse de fichiers XML, mais regardons un exemple plus complet en utilisant ElementTree :
import xml.etree.ElementTree as ET
tree = ET.parse("books.xml")
root = tree.getroot()
for book in root.findall("book"):
title = book.find("title").text
author = book.find("author").text
year = book.find("year").text
print(f"'{title}' par {author}, publié en {year}")
Ce script lit notre fichier XML et affiche des informations formatées sur chaque livre.
Modifier un fichier XML
Enfin, modifions un fichier XML existant :
import xml.etree.ElementTree as ET
tree = ET.parse("books.xml")
root = tree.getroot()
for book in root.findall("book"):
year = int(book.find("year").text)
if year < 2000:
book.find("year").text = str(year + 100)
tree.write("modified_books.xml")
Ce script ajoute 100 ans à la date de publication de tout livre publié avant 2000. C'est comme si nous envoyions ces livres dans le futur !
Voici un tableau résumant les principales méthodes que nous avons utilisées :
Méthode | Description |
---|---|
ET.parse() |
Analyser un fichier XML |
ET.Element() |
Créer un nouvel élément |
ET.SubElement() |
Créer un nouvel élément enfant |
element.findall() |
Trouver tous les sous-éléments correspondants |
element.find() |
Trouver le premier sous-élément correspondant |
element.text |
Obtenir ou définir le texte d'un élément |
tree.write() |
Écrire l'arbre XML dans un fichier |
Et voilà ! Nous avons couvert les bases du traitement XML en Python. N'oubliez pas, la pratique fait le maître, alors n'hésitez pas à expérimenter avec ces exemples. XML peut sembler un peu intimidant au début, mais une fois que vous l'avez maîtrisé, vous découvrirez qu'il est un outil puissant pour travailler avec des données structurées.
Bon codage, futurs maîtres XML ! ??
Credits: Image by storyset