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 и до его возврата.

По умолчанию класс также реализует метод разбора интерфейса XMLReader, используя методы feed, close и reset интерфейса IncrementalParser в качестве удобства для писателей драйверов SAX 2.0.

class xml.sax.xmlreader.Locator

Интерфейс для связывания события SAX с местоположением документа. Объект локатора возвращает достоверные результаты только при вызове методов 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 или path-like, или объектом 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)

Установите имя функции в значение. Если функция не распознана, выдается сообщение SAXNotRecognizedException. Если функция или ее настройка не поддерживается синтаксическим анализатором, будет вызвано SAXNotSupportedException.

XMLReader.getProperty(propertyname)

Возвращает текущую настройку для свойства propertyname. Если свойство не распознано, выдается сообщение SAXNotRecognizedException. Известные имена свойств перечислены в модуле xml.sax.handler.

XMLReader.setProperty(propertyname, value)

Установите имя свойства в значение. Если свойство не распознано, выдается сообщение SAXNotRecognizedException. Если свойство или его установка не поддерживается синтаксическим анализатором, то будет вызвано SAXNotSupportedException.

Объекты IncrementalParser

Экземпляры IncrementalParser предлагают следующие дополнительные методы:

IncrementalParser.feed(data)

Обработать фрагмент данных.

IncrementalParser.close()

Предположить конец документа. Это позволит проверить условия корректности, которые могут быть проверены только в конце, вызвать обработчики и может очистить ресурсы, выделенные во время разбора.

IncrementalParser.reset()

Этот метод вызывается после вызова close для сброса парсера, чтобы он был готов к разбору новых документов. Результаты вызова parse или feed после close без вызова reset не определены.

Объекты локатора

Экземпляры 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).

Атрибут кодировки InputSource игнорируется, если InputSource также содержит поток символов.

InputSource.getEncoding()

Получение кодировки символов данного InputSource.

InputSource.setByteStream(bytefile)

Установите поток байтов (a binary file) для данного источника ввода.

Парсер SAX проигнорирует это, если указан также символьный поток, но будет использовать байтовый поток, предпочитая открывать URI-соединение самостоятельно.

Если приложение знает кодировку символов потока байтов, оно должно установить ее с помощью метода setEncoding.

InputSource.getByteStream()

Получение потока байтов для данного источника ввода.

Метод getEncoding возвращает кодировку символов для данного потока байтов, или None, если она неизвестна.

InputSource.setCharacterStream(charfile)

Установите поток символов (a text file) для этого источника ввода.

Если указан поток символов, парсер SAX будет игнорировать любой поток байтов и не будет пытаться открыть URI-соединение с идентификатором системы.

InputSource.getCharacterStream()

Получить поток символов для данного источника ввода.

Интерфейс Attributes

Объекты Attributes реализуют часть mapping protocol, включая методы 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) для квалифицированного имени.

AttributesNS.getQNameByName(name)

Возвращает квалифицированное имя для пары (namespace, localname).

AttributesNS.getQNames()

Возвращает квалифицированные имена всех атрибутов.

Вернуться на верх