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 !

Python - XML Processing

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 :

  1. SAX (Simple API for XML)
  2. DOM (Document Object Model)
  3. 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