"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.
