# Programmation Python/XML
## Partie 1 - Introduction

* Avant-propos à l'attention des non-programmeurs
* Introduction
* Installation
* Éditeurs
* Programmer en deux minutes
** une messagerie instantanée
** un programme interfacé avec Wikipédia
** un serveur Web

## Partie 2 - Le langage

* Afficher un texte
* Structure d'un programme
* Variables
* Opérateurs
* Structures de contrôle
* Instructions répétitives
* Types
** Numériques
** Booléens
** Chaines de caractères
** Listes
** Tuples
** Dictionnaires
** Dates
** Ensembles
* Fonctions
* Modules
* Exercices
** Palindrome
* Regex
* Programmation orientée objet pour les non-programmeurs
* Classes
* Classes et Interfaces graphiques
* Fichiers
* Exceptions
* Bases de données
** Gestion
* L'interface CGI
* Applications web
* Réseau
* Threads

## Partie 3 - Les bibliothèques

* Bibliothèques pour Python
* L'interface graphique
* Utilisation de fenêtres et de graphismes
** Tkinter
** Widgets
** Turtle
* Les threads
* XML
* JSON
* Tests
* Analyse statique de programmes
* Fabric
* Le Web
** Django
** Karrigell
** Aiohttp

## Partie 1 - Introduction

* Avant-propos à l'attention des non-programmeurs
* Introduction
* Installation
* Éditeurs
* Programmer en deux minutes
** une messagerie instantanée
** un programme interfacé avec Wikipédia
** un serveur Web

## Partie 2 - Le langage

* Afficher un texte
* Structure d'un programme
* Variables
* Opérateurs
* Structures de contrôle
* Instructions répétitives
* Types
** Numériques
** Booléens
** Chaines de caractères
** Listes
** Tuples
** Dictionnaires
** Dates
** Ensembles
* Fonctions
* Modules
* Exercices
** Palindrome
* Regex
* Programmation orientée objet pour les non-programmeurs
* Classes
* Classes et Interfaces graphiques
* Fichiers
* Exceptions
* Bases de données
** Gestion
* L'interface CGI
* Applications web
* Réseau
* Threads

## Partie 3 - Les bibliothèques

* Bibliothèques pour Python
* L'interface graphique
* Utilisation de fenêtres et de graphismes
** Tkinter
** Widgets
** Turtle
* Les threads
* XML
* JSON
* Tests
* Analyse statique de programmes
* Fabric
* Le Web
** Django
** Karrigell
** Aiohttp
[ Modifier le sommaire ]
Il existe dans Python une bibliothèque permettant de manipuler les fichiers XML. Elle implémente la manière SAX (Simple API for XML) et DOM (Document Object Model).
Voyons comment manipuler simplement les fichiers XML grâce à la méthode SAX.

## La méthode SAX

Cette méthode est basée sur les évènements : une fonction est appelée lorsque l'on ouvre une balise, une autre lorsque le programme rencontre du texte, et une autre encore lorsque la balise se ferme.
Ces évènements sont définis dans une classe nommée interface. Cette classe doit dériver de ContentHandler, contenu dans le module xml.sax, et peut implémenter les fonctions suivantes :
* startElement est la fonction appelée lors de l' ouverture d' une balise. Les deux arguments sont le nom et un dictionnaire contenant les attributs.
* endElement est la fonction appelée lors de la fermeture d' une balise. La fonction prend le nom de la balise en argument.
* characters est appelée lorsque le parseur rencontre un caractère en dehors d' une balise. Ce caractère est passé en paramètre.
Une fois cette classe faite, il faut créer un parseur. Cela est fait grâce à la fonction make_parser, située elle aussi dans le module xml.sax. On lui associe ensuite une instance de l'interface avec la méthode setContentHandler, et on lance l'analyse du fichier grâce à la méthode parse, qui prend le nom du fichier en argument.
Voici donc le code final :
* from xml.sax.handler import ContentHandler
* import xml.sax
* import sys
* class compteurElements(ContentHandler):
* def __init__(self):
* self.elem=
* def startElement(self,name,attr):
* if not self.elem.has_key(name):
* self.elem[name] = 0
* self.elem[name] += 1
* def characters(self,ch):
* print ch
* def endElement (self, name):
* print name + ":" + str(self.elem[name])
* parser = xml.sax.make_parser
* handler = compteurElements
* parser.setContentHandler(handler)
* parser.parse(sys.argv[1])
* Exemple 1 : Un compteur d'éléments bavard

## La méthode DOM

Le module se nomme xml.dom :

## Références

* ↑ https://docs.python.org/2/library/xml.dom.html