xml.sax.xmlreader — интерфейс для XML-анализаторов
Исходный код: Lib/xml/sax/xmlreader.py
SAX-анализаторы реализуют интерфейс XMLReader. Они реализованы в модуле Python, который должен предоставлять функцию create_parser(). Эта функция вызывается функцией xml.sax.make_parser() без аргументов для создания нового объекта анализатора.
-
class xml.sax.xmlreader.XMLReader -
Базовый класс, от которого могут наследоваться SAX-анализаторы.
-
class xml.sax.xmlreader.IncrementalParser -
В некоторых случаях желательно не анализировать источник ввода целиком сразу, а передавать фрагменты документа по мере их поступления. Обратите внимание, что считыватель обычно также не читает весь файл целиком, а считывает его фрагментами; однако
parse()не вернётся, пока не будет обработан весь документ. Поэтому эти интерфейсы следует использовать, если блокирующее поведениеparse()нежелательно.После создания экземпляра анализатор сразу готов принимать данные с помощью метода feed. После завершения анализа вызовом close необходимо вызвать метод reset, чтобы подготовить анализатор к приёму новых данных — через feed или с помощью метода parse.
Обратите внимание, что эти методы нельзя вызывать во время анализа, то есть после вызова parse и до его возврата.
Для удобства разработчиков драйверов SAX 2.0 этот класс по умолчанию также реализует метод parse интерфейса XMLReader с помощью методов feed, close и reset интерфейса IncrementalParser.
-
class xml.sax.xmlreader.Locator -
Интерфейс для связывания события SAX с местом в документе. Объект locator возвращает достоверные результаты только во время вызовов методов DocumentHandler; в любое другое время результаты непредсказуемы. Если информация недоступна, методы могут возвращать
None.
-
class xml.sax.xmlreader.InputSource(system_id=None) -
Инкапсуляция информации, необходимой объекту
XMLReaderдля чтения сущностей.Этот класс может содержать информацию о публичном идентификаторе, системном идентификаторе, потоке байтов (возможно, с информацией о кодировке символов) и/или символьном потоке сущности.
Приложения создают объекты этого класса для использования в методе
XMLReader.parse()и для возврата из EntityResolver.resolveEntity.Объект
InputSourceпринадлежит приложению; объектуXMLReaderне разрешается изменять объектыInputSource, переданные ему приложением, хотя он может создавать их копии и изменять копии.
-
class xml.sax.xmlreader.AttributesImpl(attrs) -
Это реализация интерфейса
Attributes(см. раздел Интерфейс Attributes). Это объект, подобный словарю, который представляет атрибуты элемента при вызовеstartElement(). Помимо наиболее полезных операций со словарями, он поддерживает ряд других методов, описанных в интерфейсе. Объекты этого класса должны создаваться считывателями; attrs должен быть объектом, подобным словарю, содержащим отображение имён атрибутов на значения атрибутов.
-
class xml.sax.xmlreader.AttributesNSImpl(attrs, qnames) -
Вариант
AttributesImplс поддержкой пространств имён, который передаётся вstartElementNS(). Он является производным отAttributesImpl, но трактует имена атрибутов как пары из двух элементов: namespaceURI и localname. Кроме того, он предоставляет ряд методов, принимающих квалифицированные имена в том виде, в котором они встречаются в исходном документе. Этот класс реализует интерфейсAttributesNS(см. раздел Интерфейс AttributesNS).
Объекты XMLReader
Интерфейс XMLReader поддерживает следующие методы:
-
XMLReader.parse(source) -
Обработать источник ввода, создавая события SAX. Объект source может быть системным идентификатором (строкой, идентифицирующей источник ввода, — обычно именем файла или URL-адресом), объектом
pathlib.Pathили подобным путём либо объектомInputSource. Когдаparse()возвращает управление, ввод полностью обработан, и объект анализатора можно удалить или сбросить.Изменено в версии 3.5: Добавлена поддержка символьных потоков.
Изменено в версии 3.8: Добавлена поддержка объектов, подобных путям.
-
XMLReader.getContentHandler() -
Вернуть текущий
ContentHandler.
-
XMLReader.setContentHandler(handler) -
Установить текущий
ContentHandler. ЕслиContentHandlerне задан, события содержимого будут отбрасываться.
-
XMLReader.getDTDHandler() -
Вернуть текущий
DTDHandler.
-
XMLReader.setDTDHandler(handler) -
Установить текущий
DTDHandler. ЕслиDTDHandlerне задан, события DTD будут отбрасываться.
-
XMLReader.getEntityResolver() -
Вернуть текущий
EntityResolver.
-
XMLReader.setEntityResolver(handler) -
Установить текущий
EntityResolver. ЕслиEntityResolverне задан, попытки разрешить внешнюю сущность приведут к открытию системного идентификатора этой сущности и завершатся ошибкой, если он недоступен.
-
XMLReader.getErrorHandler() -
Вернуть текущий
ErrorHandler.
-
XMLReader.setErrorHandler(handler) -
Установить текущий обработчик ошибок. Если
ErrorHandlerне задан, ошибки будут вызываться как исключения, а предупреждения будут выводиться.
-
XMLReader.setLocale(locale) -
Позволяет приложению задать локаль для ошибок и предупреждений.
SAX-анализаторы не обязаны обеспечивать локализацию ошибок и предупреждений; однако, если они не могут поддерживать запрошенную локаль, они должны вызвать исключение SAX. Приложения могут запросить изменение локали в середине анализа.
-
XMLReader.getFeature(featurename) -
Вернуть текущее значение параметра функции featurename. Если функция не распознана, вызывается
SAXNotRecognizedException. Список известных имён функций приведён в модулеxml.sax.handler.
-
XMLReader.setFeature(featurename, value) -
Установить для featurename значение value. Если функция не распознана, вызывается
SAXNotRecognizedException. Если анализатор не поддерживает функцию или её значение, вызывается исключение SAXNotSupportedException.
-
XMLReader.getProperty(propertyname) -
Вернуть текущее значение свойства propertyname. Если свойство не распознано, вызывается
SAXNotRecognizedException. Список известных имён свойств приведён в модулеxml.sax.handler.
-
XMLReader.setProperty(propertyname, value) -
Установить для propertyname значение value. Если свойство не распознано, вызывается
SAXNotRecognizedException. Если анализатор не поддерживает свойство или его значение, вызывается исключение SAXNotSupportedException.
Объекты IncrementalParser
Экземпляры IncrementalParser предоставляют следующие дополнительные методы:
-
IncrementalParser.feed(data) -
Обработать фрагмент data.
-
IncrementalParser.close() -
Считать, что документ завершён. Будут проверены условия корректности документа, которые можно проверить только в конце, вызваны обработчики и, возможно, освобождены ресурсы, выделенные во время анализа.
-
IncrementalParser.reset() -
Этот метод вызывается после close для сброса анализатора и подготовки его к анализу новых документов. Результаты вызова parse или feed после close без вызова reset не определены.
Объекты Locator
Экземпляры Locator предоставляют следующие методы:
-
Locator.getColumnNumber() -
Вернуть номер столбца, в котором начинается текущее событие.
-
Locator.getLineNumber() -
Вернуть номер строки, в которой начинается текущее событие.
-
Locator.getPublicId() -
Вернуть публичный идентификатор текущего события.
-
Locator.getSystemId() -
Вернуть системный идентификатор текущего события.
Объекты InputSource
-
InputSource.setPublicId(id) -
Задать публичный идентификатор этого объекта
InputSource.
-
InputSource.getPublicId() -
Вернуть публичный идентификатор этого объекта
InputSource.
-
InputSource.setSystemId(id) -
Задать системный идентификатор этого объекта
InputSource.
-
InputSource.getSystemId() -
Вернуть системный идентификатор этого объекта
InputSource.
-
InputSource.setEncoding(encoding) -
Задать кодировку символов этого объекта
InputSource.Кодировка должна быть строкой, допустимой в объявлении кодировки XML (см. раздел 4.3.3 рекомендации XML).
Атрибут encoding объекта
InputSourceигнорируется, еслиInputSourceтакже содержит символьный поток.
-
InputSource.getEncoding() -
Получить кодировку символов этого InputSource.
-
InputSource.setByteStream(bytefile) -
Задать поток байтов (двоичный файл) для этого источника ввода.
SAX-анализатор проигнорирует его, если также указан символьный поток, но предпочтёт поток байтов самостоятельному открытию URI-соединения.
Если приложению известна кодировка символов потока байтов, её следует задать с помощью метода setEncoding.
-
InputSource.getByteStream() -
Получить поток байтов для этого источника ввода.
Метод getEncoding вернёт кодировку символов этого потока байтов или
None, если она неизвестна.
-
InputSource.setCharacterStream(charfile) -
Задать символьный поток (текстовый файл) для этого источника ввода.
Если символьный поток указан, SAX-анализатор проигнорирует любой поток байтов и не будет пытаться открывать URI-соединение с системным идентификатором.
-
InputSource.getCharacterStream() -
Получить символьный поток для этого источника ввода.
Интерфейс Attributes
Объекты Attributes реализуют часть протокола отображения, включая методы copy(), get(), __contains__(), items(), keys() и values(). Также предоставляются следующие методы:
-
Attributes.getLength() -
Вернуть количество атрибутов.
-
Attributes.getNames() -
Вернуть имена атрибутов.
-
Attributes.getType(name) -
Вернуть тип атрибута name, который обычно равен
'CDATA'.
-
Attributes.getValue(name) -
Вернуть значение атрибута name.
Интерфейс AttributesNS
Этот интерфейс является подтипом интерфейса Attributes (см. раздел Интерфейс Attributes). Все методы этого интерфейса также доступны объектам AttributesNS.
Также доступны следующие методы:
-
AttributesNS.getValueByQName(name) -
Вернуть значение для квалифицированного имени.
-
AttributesNS.getNameByQName(name) -
Вернуть пару
(namespace, localname)для квалифицированного имени name.
-
AttributesNS.getQNameByName(name) -
Вернуть квалифицированное имя для пары
(namespace, localname).
-
AttributesNS.getQNames() -
Вернуть квалифицированные имена всех атрибутов.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/xml.sax.reader.html