XML.sax— Soporte para analizadores SAX2

Código fuente: Lib/xml/sax/__init__.py


El paquete xml.sax provee un número de módulos que implementan la API Simple para la interfaz XML (SAX) para Python. El paquete mismo provee las excepciones SAX y las funciones de conveniencia que serán las más usadas por los usuarios de la API SAX.

Advertencia

El módulo XML.sax no es seguro contra datos construidos maliciosamente. Si necesita analizar datos no autenticados o no confiables, mirar Vulnerabilidades XML.

Distinto en la versión 3.7.1: El analizador SAX ya no procesa entidades generales externas por defecto para incrementar seguridad. Antes, el analizador creaba conexiones de red para buscar archivos remotos o archivos locales cargados del sistema de archivos para DTD y entidades. La característica puede ser activadas de nuevo con el método setFeature() en el objeto analizador y el argumento feature_external_ges.

Las funciones de conveniencia son:

xml.sax.make_parser(parser_list=[])

Crea y retorna un objeto SAX XMLReader. El primer analizador encontrado será el que se use. Si se provee parser_list, debe ser un iterable de cadenas de caracteres el cual nombra módulos que tienen una función llamada créate_parser(). Los módulos listados en parser_list serán usados antes de los módulos en la lista de analizadores por defecto.

Distinto en la versión 3.8: El argumento parser_list puede ser cualquier iterable, no sólo una lista.

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

Crea un analizador SAD y úsalo para analizar un documento. El documento, aprobado como filename_or_steam, puede ser un nombre de archivo o un objeto de archivo. El parámetro handler necesita ser una instancia SAX ContentHandler. Si se da error_handler, debe ser una instancia ErrorHandler SAX; si es omitido, se lanzará SAXParseException en todos los errores. No hay valor retornado; toda tarea debe ser realizada por el handler aprobado.

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

Similar a parser(), pero analiza desde un búfer string recibido como un parámetro. string debe ser una instancia str o un bytes-like object.

Distinto en la versión 3.5: Agregado soporte de instancias str.

Una aplicación SAX típica usa tres tipos de objetos: lectores, gestores y fuentes de entrada. «Lector» en este contexto es otro término para analizador, por ejemplo, alguna pieza de código que lee los bytes o caracteres de la fuente de entrada, y produce una secuencia de eventos. Los eventos luego se distribuyen a los objetos gestores, por ejemplo el lector invoca un método en el gestor. Una aplicación SAX debe por tanto obtener un objeto lector, crear o abrir una fuente de entrada, crear los gestores, y conectar esos objetos juntos. Como paso final de preparación, el lector es llamado para analizar la entrada. Durante el análisis, los métodos en los objetos gestores son llamados basados en eventos estructurales y sintácticos de los datos introducidos.

Para estos objetos, sólo las interfaces son relevantes; éstos normalmente no son instanciados por la aplicación misma. Ya que Python no tiene una noción explícita de interfaz, éstas son introducidas formalmente como clases, pero las aplicaciones suelen usar implementaciones que no heredan de las clases provistas. Las interfaces InputSource, Locator, Attributes, AttributesNS, y XMLReader son definidas en el módulo xml.sax.xmlreader. Las interfaces de gestión son definidas en xml.sax.handler. Por conveniencia, InputSource (el cual suele ser instanciado directamente) y el gestor de clases están también disponibles desde xml.sax Estas interfaces son descritas a continuación.

En adición a esas clases, xml.sax provee las siguientes clases de excepción.

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

Encapsula un error XML o advertencia. Esta clase puede contener errores básicos o información de advertencias ya sea para el analizador XML o la aplicación: esto puede ser heredado para proveer funcionalidad adicionar o para agregar localización. Nota que a pesar de los analizadores definidos en la interfaz ErrorHandler recibe instancias de esta excepción, no es requerido para lanzar la excepción — esto es algo útil como un contenedor para información.

Cuando es instanciado, msg debería ser una descripción del error legible para humanos. El parámetro opcional exception, si es dado, debería ser None o una excepción que fue atrapada por el código analizador y se transmite como información.

Esta es la clase base para las otras clases excepción SAX.

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

Subclase de SAXException levantada en errores de análisis. Las instancias de esta clase son pasadas a los métodos de las interfaces SAX ErrorHandler para proveer información sobre el error de análisis. Esta clase soporta la interfaz SAX Locator así como la interfaz SAXException.

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

Subclase de SAXException lanzada cuando una SAX XMLReader es confrontada con una propiedad o característica no reconocida. Las aplicaciones SAX y extensiones pueden usar esta clase para propósitos similares.

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

Las subclases de SAXException se lanzan cuando un SAX sax se pregunta para habilitar una característica que no tiene soporte, o para establecer una propiedad a un valor que la implementación no da soporte. Las aplicaciones sAX y las extensiones pueden usar esta clase para propósitos similares.

Ver también

SAX: The Simple API for XML

Este sitio es el punto focal para la definición de la API SAX. Provee una implementación Java y documentación en línea. Los enlaces para implementaciones e información histórica también están disponibles.

Módulo xml.sax.handler

Definiciones de las interfaces para objetos proporcionados por aplicaciones.

Módulo xml.sax.saxutils

Funciones de conveniencia para usar en aplicaciones SAX.

Módulo xml.sax.xmlreader

Definiciones de las interfaces para objetos que proveen analizadores.

Objetos SAXException

La clase de excepción SAXException da soporte a los siguientes métodos:

SAXException.getMessage()

Retorna un mensaje legible para humanos describiendo la condición de error.

SAXException.getException()

Retorna un objeto excepción encapsulado, o None.