# `xml.sax.xmlreader` — Interfaz para analizadores XML

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

Los analizadores SAX implementan la interfaz `XMLReader`. Están implementados en un módulo Python, que debe proveer una función `create_parser()`. Esta función es invocada por `xml.sax.make_parser()` sin argumentos para crear un nuevo objeto analizador.

class xml.sax.xmlreader.XMLReader

  Clase base que puede ser heredada por analizadores SAX.

class xml.sax.xmlreader.IncrementalParser

  En algunos casos, es deseable no analizar una fuente de entrada a la vez, si no alimentar partes del documento a medida que estén disponibles. Tenga en cuenta que el lector normalmente no leerá el fichero completo, si no que también lo leerá por partes, aún así `parse()` no retornará hasta que el documento por completo es procesado. Por lo tanto, estas interfaces deben utilizarse si el comportamiento de bloqueo `parse()` no es deseable.

  Cuando se crea una instancia del analizador, está listo para comenzar a aceptar información desde el método de alimentación inmediatamente. Después de que el análisis ha finalizado con una llamada para cerrar, se debe llamar al método de reinicio para que el analizador esté listo para aceptar información nueva, ya sea de la fuente o utilizando el método de análisis.

  Tenga en cuenta que estos métodos no deben ser llamados durante el análisis, es decir, después de que el análisis ha sido llamado y antes de que regrese.

  Por defecto, la clase también implementa el método de análisis de la interfaz XMLReader utilizando los métodos de alimentación, cierre y reinicio de la interfaz IncrementalParser en conveniencia a los escritores de controlador SAX 2.0.

class xml.sax.xmlreader.Locator

  La interfaz para asociar un evento SAX con una ubicación del documento. Un objeto localizador retornará resultados válidos sólo durante llamadas a métodos DocumentHandler; en cualquier otro momento, los resultados son impredecibles. Si la información no está disponible, los métodos pueden retornar `None`.

class xml.sax.xmlreader.InputSource(system_id=None)

  La encapsulación de la información necesaria por el `XMLReader` para leer entidades.

  Esta clase puede incluir información sobre el identificador público, identificador del sistema, flujo de bytes (posiblemente con la información de codificación de caracteres) y/o el flujo de caracteres de una entidad.

  Las aplicaciones crearán objetos de esta clase para uso en el método `XMLReader.parse()` y para retornar desde EntityResolver.resolveEntity.

  Una `InputSource` pertenece a la aplicación, el `XMLReader` no tiene permitido modificar objetos `InputSource` pasados desde la aplicación, a pesar de que puede hacer copias y modificarlas.

class xml.sax.xmlreader.AttributesImpl(attrs)

  Esta es una implementación de la interfaz `Attributes` (vea la sección La Interfaz Attributes). Este es un objeto de tipo diccionario que representa los atributos de elemento en una llamada `startElement()`. En adición a las operaciones de diccionario más útiles, soporta una serie de otros métodos como se describe en la interfaz. Los lectores deben crear una instancia de los objetos de esta clase; attrs debe ser un objeto de tipo diccionario que contenga un mapeo de nombres de atributo a valores de atributo.

class xml.sax.xmlreader.AttributesNSImpl(attrs, qnames)

  Variante consciente del espacio de nombres de `AttributesImpl`, que se pasará a `startElementNS()`. Es derivada de `AttributesImpl`, pero entiende nombres de atributo como dos tuplas de namespaceURI y localname. En adición, provee una serie de métodos esperando nombres calificados como aparecen en el documento original. Esta clase implementa la interfaz `AttributesNS` (vea la sección La Interfaz AttributesNS).

## Objetos XMLReader

La interfaz `XMLReader` soporta los siguientes métodos:

XMLReader.parse(source)

  Procesa una fuente de entrada, produciendo eventos SAX. El objeto source puede ser un identificador de sistema (una cadena identificando la fuente de entrada – típicamente un nombre de fichero o una URL), un `pathlib.Path` o un objeto path-like, o un objeto `InputSource`. Cuando `parse()` retorna, la entrada es procesada completamente, y el objeto analizador puede ser descartado o reiniciado.

  Distinto en la versión 3.5: Agregado soporte de flujo de caracteres.

  Distinto en la versión 3.8: Agregado soporte de objetos path-like.

XMLReader.getContentHandler()

  Retorna el `ContentHandler` actual.

XMLReader.setContentHandler(handler)

  Establece el `ContentHandler` actual. Si ningún `ContentHandler` es establecido, los eventos de contenido serán descartados.

XMLReader.getDTDHandler()

  Retorna el `DTDHandler` actual.

XMLReader.setDTDHandler(handler)

  Establece el `DTDHandler` actual. Si ningún `DTDHandler` es establecido, los eventos DTD serán descartados.

XMLReader.getEntityResolver()

  Retorna el `EntityResolver` actual.

XMLReader.setEntityResolver(handler)

  Establece el `EntityResolver` actual. Si ningún `EntityResolver` es establecido, los intentos de resolver una entidad externa resultarán en la apertura del identificador de sistema para la entidad, y un error si no está disponible.

XMLReader.getErrorHandler()

  Retorna el `ErrorHandler` actual.

XMLReader.setErrorHandler(handler)

  Establece el manejador de errores actual. Si ningún `ErrorHandler` es establecido, se lanzarán errores como excepciones, y se imprimirán alertas.

XMLReader.setLocale(locale)

  Permite a una aplicación establecer la configuración local para errores y alertas.

  Analizadores SAX no son requeridos para proveer localización para errores y alertas; si no pueden soportar la configuración local solicitada, de cualquier forma, lanzarán una excepción SAX. Las aplicaciones pueden solicitar un cambio local en medio del análisis.

XMLReader.getFeature(featurename)

  Retorna la configuración actual para la característica featurename. Si la característica no es reconocida, `SAXNotRecognizedException` es lanzada. Los bien conocidos featurenames son listados en el módulo `xml.sax.handler`.

XMLReader.setFeature(featurename, value)

  Establece el featurename a value. Si la característica no es reconocida, `SAXNotRecognizedException` es lanzada. Si la característica o su configuración no es soportada por el analizador, SAXNotSupportedException es lanzada.

XMLReader.getProperty(propertyname)

  Retorna la configuración actual para la propiedad propertyname. Si la configuración no es reconocida, una `SAXNotRecognizedException` es lanzada. Las bien conocidas propertynames son listadas en el módulo `xml.sax.handler`.

XMLReader.setProperty(propertyname, value)

  Establece el propertyname a value. Si la propiedad no es reconocida, `SAXNotRecognizedException` es lanzada. Si la propiedad o su configuración no es soportada por el analizador, SAXNotSupportedException es lanzada.

## Objetos IncrementalParser

Las instancias de `IncrementalParser` ofrecen los siguientes métodos adicionales:

IncrementalParser.feed(data)

  Procesa una parte de data.

IncrementalParser.close()

  Asume el fin del documento. Eso verificará las condiciones bien formadas que pueden ser verificadas sólo al final, invocar manejadores, y puede limpiar los recursos asignados durante el análisis.

IncrementalParser.reset()

  Este método es llamado después de que el cierre ha sido llamado para restablecer el analizador, de forma que esté listo para analizar nuevos documentos. Los resultados de llamar parse o feed después del cierre sin llamar a reset son indefinidos.

## Objetos localizadores

Las instancias de `Locator` proveen estos métodos:

Locator.getColumnNumber()

  Retorna el número de columna donde el evento actual comienza.

Locator.getLineNumber()

  Retorna el número de línea donde el evento actual comienza.

Locator.getPublicId()

  Retorna el identificador público para el evento actual.

Locator.getSystemId()

  Retorna el identificador de sistema para el evento actual.

## Objetos InputSource

InputSource.setPublicId(id)

  Establece el identificador público de esta `InputSource`.

InputSource.getPublicId()

  Retorna el identificador público para esta `InputSource`.

InputSource.setSystemId(id)

  Establece el identificador de sistema de esta `InputSource`.

InputSource.getSystemId()

  Retorna el identificador de sistema para esta `InputSource`.

InputSource.setEncoding(encoding)

  Establece la codificación de caracteres para esta `InputSource`.

  La codificación debe ser una cadena aceptable para una declaración de codificación XML (vea la sección 4.3.3 de la recomendación XML).

  El atributo de codificación de la `InputSource` es ignorado si la `InputSource` contiene también un flujo de caracteres.

InputSource.getEncoding()

  Obtiene la codificación de caracteres de esta InputSource.

InputSource.setByteStream(bytefile)

  Establece el flujo de bytes (un binary file) para esta fuente de entrada.

  El analizador SAX ignorará esto si existe también un flujo de caracteres especificado, pero utilizará un flujo de bytes en preferencia para abrir una conexión URI en sí.

  Si la aplicación conoce la codificación de caracteres del flujo de bytes, debería establecerla con el método setEncoding.

InputSource.getByteStream()

  Obtiene el flujo de bytes para esta fuente de entrada.

  El método getEncoding retornará la codificación de caracteres para este flujo de bytes, o `None` si se desconoce.

InputSource.setCharacterStream(charfile)

  Establece el flujo de caracteres (un text file) para esta fuente de entrada.

  Si existe un flujo de caracteres especificado, el analizador SAX ignorará cualquier flujo de bytes y no intentará abrir una conexión URI al identificador de sistema.

InputSource.getCharacterStream()

  Obtiene el flujo de caracteres para esta fuente de entrada.

## La Interfaz `Attributes`

Los objetos `Attributes` implementa una porción del mapping protocol, incluyendo los métodos `copy()`, `get()`, `__contains__()`, `items()`, `keys()`, y `values()`. Los siguientes métodos también son provistos:

Attributes.getLength()

  Retorna el número de atributos.

Attributes.getNames()

  Retorna los nombres de los atributos.

Attributes.getType(name)

  Retorna el tipo del atributo name, que es normalmente `'CDATA'`.

Attributes.getValue(name)

  Retorna el valor del atributo name.

## La Interfaz `AttributesNS`

Esta interfaz es un subtipo de la interfaz `Attributes` (vea la sección La Interfaz Attributes). Todos los métodos soportados por la interfaz están también disponibles en los objetos `AttributesNS`.

Los siguientes métodos están también disponibles:

AttributesNS.getValueByQName(name)

  Retorna el valor para un nombre cualificado.

AttributesNS.getNameByQName(name)

  Retorna el par `(namespace, localname)` para un name cualificado.

AttributesNS.getQNameByName(name)

  Retorna el nombre cualificado para un par `(namespace, localname)`.

AttributesNS.getQNames()

  Retorna los nombres cualificados para todos los atributos.