# `xml.sax` — Prise en charge des analyseurs SAX2

Code source : Lib/xml/sax/__init__.py

Le paquet `xml.sax` fournit des modules qui implémentent l'interface Simple API for XML (SAX) pour Python. Le paquet en lui-même fournit les exceptions SAX et les fonctions les plus utiles qui sont le plus utilisées par les utilisateurs de l'API SAX.

Avertissement

le module `xml.sax` n'est pas sécurisé contre les données construites de façon malveillante. Si vous avez besoin d'analyser des données non sécurisées ou non authentifiées, lisez Vulnérabilités XML.

Modifié dans la version 3.7.1: l'analyseur SAX ne traite plus les entités externes générales par défaut pour augmenter la sécurité. Auparavant, l'analyseur créait des connexions réseau pour extraire des fichiers distants ou des fichiers locaux chargés à partir du système de fichiers pour les DTD et les entités. La fonctionnalité peut être activée à nouveau avec la méthode `setFeature()` sur l'objet analyseur et l'argument `feature_external_ges`.

Les fonctions les plus utiles sont :

xml.sax.make_parser(parser_list=[])

  Crée et renvoie un objet `XMLReader` SAX. Le premier analyseur trouvé est utilisé. Si parser_list est fourni, il doit être un itérable de chaînes de caractères qui nomme des modules qui ont une fonction nommée `create_parser()`. Les modules listés dans parser_list sont utilisés avant les modules dans la liste par défaut des analyseurs.

  Modifié dans la version 3.8: l'argument parser_list peut être n'importe quel itérable, pas seulement une liste.

xml.sax.parse(filename_or_stream, handler, error_handler=handler.ErrorHandler())

  Crée un analyseur SAX et l'utilise pour analyser un document. Le document transmis comme filename_or_stream, peut être un nom de fichier ou un objet fichier. Le paramètre handler doit être une instance `ContentHandler` SAX. Si un error_handler est donné, il doit être un `ErrorHandler` SAX ; s'il est omis, une `SAXParseException` est levée sur toutes les erreurs. Il n'y a pas de valeur de retour, tout le travail doit être fait par le handler transmis.

xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())

  Similaire à `parse()`, mais analyse à partir d'un espace mémoire string reçu en tant que paramètre. string doit être une instance `str` ou un objet octet-compatible.

  Modifié dans la version 3.5: ajout de la gestion des instances `str`.

Une application SAX typique utilise trois types d'objets : les readers, les handlers et les sources d'entrée. Reader dans ce contexte est un autre terme pour « analyseur », c'est-à-dire un morceau de code qui lit les octets ou les caractères de la source d'entrée et qui produit une séquence d'événements. Les événements sont ensuite distribués aux objets du handler, c'est-à-dire que le lecteur appelle une méthode sur le handler. L'application doit donc obtenir un objet reader, créer ou ouvrir les sources d'entrée, créer les handlers et connecter ces objets tous ensemble. La dernière étape de la préparation, le reader est appelé à analyser l'entrée. Pendant l'analyse, les méthodes sur les objets du handler sont appelées en fonction d'événements structurels et syntaxiques à partir des données d'entrée.

Pour ces objets, seules les interfaces sont pertinentes ; elles ne sont pas normalement instanciées par l'application elle-même. Puisque Python n'a pas de notion explicite d'interface, elles sont formellement introduites en tant que classes, mais les applications peuvent utiliser des implémentations qui n'héritent pas des classes fournies. Les interfaces `InputSource`, `Locator`, `Attributes`, `AttributesNS` et `XMLReader` sont définies dans le module `xml.sax.xmlreader`. Les interfaces du handler sont définies dans `xml.sax.handler`. Pour plus de commodité, `xml.sax.xmlreader.InputSource` (qui est souvent instanciée directement) et les classes du handler sont également disponibles à partir de `xml.sax`. Ces interfaces sont décrites ci-dessous.

En plus de ces classes, `xml.sax` fournit les classes d'exceptions suivantes.

exception xml.sax.SAXException(msg, exception=None)

  Encapsule une erreur ou un avertissement XML. Cette classe peut contenir une erreur de base ou une information d'avertissement soit de l'analyseur XML ou de l'application : elle peut être sous-classée pour fournir des fonctionnalités supplémentaires ou pour ajouter une localisation. Noter que même si les handlers définis dans l'interface `ErrorHandler` reçoivent des instances de cette exception, ce n'est pas nécessaire de lever l'exception --- il est également utile en tant que conteneur pour l'information.

  Quand elle est instanciée, msg doit être une description intelligible de l'erreur. Le paramètre optionnel exception, s'il est donné, doit être `None` ou une exception qui a été interceptée par le code d'analyse et qui est transmise comme information.

  Ceci est la classe de base pour les autres classes d'exception SAX.

exception xml.sax.SAXParseException(msg, exception, locator)

  Sous-classe de `SAXException` élevée sur les erreurs d'analyse. Les instances de cette classe sont passées aux méthodes de l'interface `ErrorHandler` SAX pour fournir des informations sur l'erreur d'analyse. Cette classe prend aussi en charge l'interface SAX `Locator` comme l'interface `SAXException`.

exception xml.sax.SAXNotRecognizedException(msg, exception=None)

  Sous-classe de `SAXException` levée quand un `XMLReader` SAX est confronté à une caractéristique ou à une propriété non reconnue. Les applications et les extensions SAX peuvent utiliser cette classe à des fins similaires.

exception xml.sax.SAXNotSupportedException(msg, exception=None)

  Sous-classe de `SAXException` levée quand un `XMLReader` SAX est demandé pour activer une fonctionnalité qui n'est pas prise en charge, ou pour définir une propriété à une valeur que l'implémentation ne prend pas en charge. Les applications et les extensions SAX peuvent utiliser cette classe à des fins similaires.

Voir aussi

SAX : l'API simple pour XML

  Ce site est le point focal pour la définition de l'API SAX. Il offre une implémentation Java et une documentation en ligne. Des liens pour l'implémentation et des informations historiques sont également disponibles.

Module `xml.sax.handler`

  Définitions des interfaces pour les objets fournis par l'application.

Module `xml.sax.saxutils`

  Fonctions pratiques pour une utilisation dans les applications SAX.

Module `xml.sax.xmlreader`

  Définitions des interfaces pour les objets fournis par l'analyseur.

## Les objets SAXException

La classe d'exception `SAXException` gère les méthodes suivantes :

SAXException.getMessage()

  Renvoie un message intelligible décrivant la condition d'erreur.

SAXException.getException()

  Renvoie un objet d'exception encapsulé ou `None`.