xml.sax.handler — Базовые классы для обработчиков SAX
Исходный код: Lib/xml/sax/handler.py
API SAX определяет четыре типа обработчиков: обработчики содержимого, обработчики DTD, обработчики ошибок и разрешители сущностей. Приложениям обычно требуется реализовать только те интерфейсы, события которых их интересуют; они могут реализовать интерфейсы в одном объекте или в нескольких объектах. Реализации обработчиков должны наследоваться от базовых классов, предоставляемых в модуле xml.sax.handler, чтобы все методы получали реализации по умолчанию.
-
class xml.sax.handler.ContentHandler -
Это основной интерфейс обратного вызова в SAX, и он наиболее важен для приложений. Порядок событий в этом интерфейсе отражает порядок информации в документе.
-
class xml.sax.handler.DTDHandler -
Обработка событий DTD.
Этот интерфейс определяет только те события DTD, которые необходимы для базового разбора (необработанные сущности и атрибуты).
-
class xml.sax.handler.EntityResolver -
Основной интерфейс для разрешения сущностей. Если вы создаете объект, реализующий этот интерфейс, и регистрируете его в вашем анализаторе, анализатор будет вызывать метод в вашем объекте для разрешения всех внешних сущностей.
-
class xml.sax.handler.ErrorHandler -
Интерфейс, используемый анализатором для представления сообщений об ошибках и предупреждениях в приложение. Методы этого объекта контролируют, преобразуются ли ошибки немедленно в исключения или обрабатываются каким-то другим способом.
В дополнение к этим классам xml.sax.handler предоставляет символические константы для имен функций и свойств.
-
xml.sax.handler.feature_namespaces
-
xml.sax.handler.feature_namespace_prefixes
-
xml.sax.handler.feature_string_interning
-
xml.sax.handler.feature_validation
-
xml.sax.handler.feature_external_ges
-
xml.sax.handler.feature_external_pes
-
xml.sax.handler.all_features -
Список всех функций.
-
xml.sax.handler.property_lexical_handler
-
xml.sax.handler.property_declaration_handler
-
xml.sax.handler.property_dom_node
-
xml.sax.handler.property_xml_string
-
xml.sax.handler.all_properties -
Список всех известных имен свойств.
Объекты ContentHandler
Пользователи должны создавать подклассы ContentHandler, чтобы поддерживать работу своего приложения. Парсер вызывает следующие методы в ответ на соответствующие события во входном документе:
-
ContentHandler.setDocumentLocator(locator) -
Вызывается парсером для предоставления приложению локатора для определения источника событий документа.
SAX-парсеры настоятельно рекомендуют (хотя это и не является обязательным) предоставлять локатор: если он это делает, он должен предоставить локатор приложению, вызвав этот метод перед вызовом других методов интерфейса DocumentHandler.
Локатор позволяет приложению определить конечную позицию любого события, связанного с документом, даже если парсер не сообщает об ошибке. Как правило, приложение будет использовать эту информацию для сообщения об собственных ошибках (например, о содержимом символов, которое не соответствует бизнес-правилам приложения). Информация, возвращаемая локатором, вероятно, недостаточна для использования с поисковой системой.
Обратите внимание, что локатор будет возвращать правильную информацию только во время вызова событий в этом интерфейсе. Приложение не должно пытаться использовать его в любое другое время.
-
ContentHandler.startDocument() -
Получает уведомление о начале документа.
SAX-парсер вызовет этот метод только один раз, перед любыми другими методами в этом интерфейсе или в DTDHandler (кроме
setDocumentLocator()).
-
ContentHandler.endDocument() -
Получает уведомление о конце документа.
SAX-парсер вызовет этот метод только один раз, и это будет последний метод, вызванный во время разбора. Парсер не должен вызывать этот метод, пока не прекратил разбор (из-за неисправимой ошибки) или не достиг конца входных данных.
-
ContentHandler.startPrefixMapping(prefix, uri) -
Начинает область сопоставления префикс-URI пространства имен.
Информация из этого события не необходима для обычной обработки пространства имен: SAX XML-читатель автоматически заменит префиксы для имен элементов и атрибутов, когда функция
feature_namespacesвключена (по умолчанию).Однако есть случаи, когда приложениям нужно использовать префиксы в данных символов или значениях атрибутов, где их нельзя безопасно автоматически расширить; события
startPrefixMapping()иendPrefixMapping()предоставляют приложению информацию для расширения префиксов в этих контекстах самостоятельно, если это необходимо.Обратите внимание, что события
startPrefixMapping()иendPrefixMapping()не гарантируются как корректно вложенные друг относительно друга: все событияstartPrefixMapping()будут происходить до соответствующего событияstartElement(), а все событияendPrefixMapping()будут происходить после соответствующего событияendElement(), но порядок не гарантируется.
-
ContentHandler.endPrefixMapping(prefix) -
Заканчивает область сопоставления префикс-URI.
См.
startPrefixMapping()для получения подробностей. Это событие всегда будет происходить после соответствующего событияendElement(), но порядок событийendPrefixMapping()не гарантируется.
-
ContentHandler.startElement(name, attrs) -
Сигнализирует о начале элемента в режиме без пространств имен.
Параметр name содержит исходное имя элемента типа XML 1.0 в виде строки, а параметр attrs содержит объект интерфейса
Attributes(см. Интерфейс атрибутов), содержащий атрибуты элемента. Объект, переданный как attrs, может быть повторно использован парсером; удержание ссылки на него не является надёжным способом сохранить копию атрибутов. Для сохранения копии атрибутов используйте методcopy()объекта attrs.
-
ContentHandler.endElement(name) -
Сигнализирует о конце элемента в режиме без пространств имен.
Параметр name содержит имя типа элемента, как и в событии
startElement().
-
ContentHandler.startElementNS(name, qname, attrs) -
Сигнализирует о начале элемента в режиме пространств имен.
Параметр name содержит имя типа элемента в виде
(uri, localname)кортежа, параметр qname содержит исходное имя XML 1.0, используемое в исходном документе, а параметр attrs содержит экземпляр интерфейсаAttributesNS(см. Интерфейс атрибутовNS), содержащий атрибуты элемента. Если элементу не присвоено пространство имен, компонент uri в name будетNone. Объект, переданный как attrs, может быть повторно использован парсером; удержание ссылки на него не является надёжным способом сохранить копию атрибутов. Для сохранения копии атрибутов используйте методcopy()объекта attrs.Парсеры могут установить значение параметра qname в
None, если не активирована функцияfeature_namespace_prefixes.
-
ContentHandler.endElementNS(name, qname) -
Сигнализирует о конце элемента в режиме пространств имен.
Параметр name содержит имя типа элемента, как и в методе
startElementNS(), аналогично параметру qname.
-
ContentHandler.characters(content) -
Получает уведомление о данных символов.
Парсер вызовет этот метод для сообщения о каждом фрагменте данных символов. SAX-парсеры могут возвращать все смежные данные символов в одном фрагменте или разделять их на несколько фрагментов; однако все символы в любом отдельном событии должны исходить из одного внешнего сущности, чтобы локатор предоставлял полезную информацию.
content может быть строкой или экземпляром байтов; модуль
expatreader всегда производит строки.Примечание
Ранее SAX 1 интерфейс, предоставляемый Python XML Special Interest Group, использовал интерфейс, более похожий на Java. Поскольку большинство парсеров, используемых из Python, не использовали более старый интерфейс, был выбран более простой синтаксис для его замены. Для преобразования старого кода в новый интерфейс используйте content вместо разделения content с помощью старых параметров offset и length.
-
ContentHandler.ignorableWhitespace(whitespace) -
Получает уведомление о пропускаемых пробелах в содержимом элемента.
Валидирующие парсеры должны использовать этот метод для сообщения о каждом фрагменте пропускаемых пробелов (см. рекомендацию W3C XML 1.0, раздел 2.10): невалидирующие парсеры также могут использовать этот метод, если они могут анализировать и использовать модели содержимого.
SAX-парсеры могут возвращать все смежные пробелы в одном фрагменте или разделять их на несколько фрагментов; однако все символы в любом отдельном событии должны исходить из одной и той же внешней сущности, чтобы локатор предоставлял полезную информацию.
-
ContentHandler.processingInstruction(target, data) -
Получает уведомление об обработке инструкции.
Парсер вызовет этот метод один раз для каждой инструкции обработки, обнаруженной: обратите внимание, что инструкции обработки могут появляться до или после основного элемента документа.
SAX-парсер никогда не должен сообщать об XML-декларации (XML 1.0, раздел 2.8) или декларации текста (XML 1.0, раздел 4.3.1) с помощью этого метода.
-
ContentHandler.skippedEntity(name) -
Получает уведомление о пропущенной сущности.
Парсер вызовет этот метод один раз для каждой пропущенной сущности. Невалидирующие процессоры могут пропустить сущности, если они не видели декларации (например, если сущность была объявлена во внешнем подмножестве DTD). Все процессоры могут пропустить внешние сущности, в зависимости от значений
feature_external_gesиfeature_external_pesсвойств.
Объекты DTDHandler
DTDHandler объекты предоставляют следующие методы:
-
DTDHandler.notationDecl(name, publicId, systemId) -
Обработка события объявления нотации.
-
DTDHandler.unparsedEntityDecl(name, publicId, systemId, ndata) -
Обработка события объявления неопределенной сущности.
Объекты EntityResolver
-
EntityResolver.resolveEntity(publicId, systemId) -
Разрешение системного идентификатора сущности и возвращение либо системного идентификатора для чтения в виде строки, либо InputSource для чтения. По умолчанию возвращается systemId.
Объекты ErrorHandler
Объекты с этим интерфейсом используются для получения информации об ошибках и предупреждениях от XMLReader. Если вы создаете объект, реализующий этот интерфейс, и регистрируете его у своего XMLReader, анализатор будет вызывать методы вашего объекта для отчета обо всех предупреждениях и ошибках. Доступны три уровня ошибок: предупреждения, (возможно) исправимые ошибки и неисправимые ошибки. Все методы принимают SAXParseException в качестве единственного параметра. Ошибки и предупреждения могут быть преобразованы в исключение, подняв переданный объект исключения.
-
ErrorHandler.error(exception) -
Вызывается, когда анализатор сталкивается с исправимой ошибкой. Если этот метод не вызывает исключение, разбор может продолжиться, но приложение больше не должно ожидать дальнейшей информации о документе. Разрешение анализатору продолжить может позволить обнаружить дополнительные ошибки в документе-входе.
-
ErrorHandler.fatalError(exception) -
Вызывается, когда анализатор сталкивается с ошибкой, от которой он не может восстановиться; ожидается, что разбор завершится, когда этот метод вернется.
-
ErrorHandler.warning(exception) -
Вызывается, когда анализатор предоставляет приложению информацию о незначительных предупреждениях. Ожидается, что разбор продолжится, когда этот метод вернется, и информация о документе по-прежнему будет передаваться приложению. Вызов исключения в этом методе приведет к завершению разбора.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/xml.sax.handler.html