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() нежелательно.

После создания экземпляра парсер он готов немедленно начать прием данных из метода канала. После завершения парсинг необходимо вызвать метод сброса, чтобы сделать парсер готовым к приему новых данных либо из канала, либо с помощью метода синтаксического анализа.

Следует отметить, что эти методы не должны вызываться во время парсинг, то есть после вызова синтаксического анализа и до его возвращает.

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

class xml.sax.xmlreader.Locator

Интерфейс для связывания события SAX с расположением документа. Объект Locator будет возвращает допустимые результаты только во время вызовов методов DocumentHandler; в любое другое время результаты непредсказуемы. Если информация недоступна, методы могут возвращает None.

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

Инкапсуляция информации, необходимой XMLReader для чтения объектов.

Этот класс может включать информацию об идентификаторе public, системном идентификаторе, поток байта (возможно с информацией о символ кодировка) и/или поток символ сущности.

Приложения создадут объекты этого класса для использования в методе XMLReader.parse() и для возврата из EntityResolver.resolureEntity.

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)

Разрешить приложению задавать locale ошибок и предупреждений.

парсерами SAX не требуются для локализации ошибок и предупреждений; однако, если они не могут поддержать запрошенный locale, они должны создать исключение SAX. Приложения могут запрашивать изменение locale в середине синтаксического анализа.

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 для сброса парсер, чтобы он был готов к разбору новых документов. Результаты вызова синтаксического анализа или канала после закрытия без вызова сброса не определены.

Объекты 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).

кодировка атрибут 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()

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