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 -
Интерфейс, используемый анализатором для передачи приложению сообщений об ошибках и предупреждениях. Методы этого объекта определяют, будут ли ошибки немедленно преобразованы в исключения или обработаны каким-либо другим способом.
-
class xml.sax.handler.LexicalHandler -
Интерфейс, используемый анализатором для представления событий, которые происходят нечасто и могут быть неинтересны многим приложениям.
Помимо этих классов, 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(см. Интерфейс Attributes) с атрибутами элемента. Объект, переданный в attrs, может повторно использоваться анализатором; сохранение ссылки на него не является надёжным способом сохранить копию атрибутов. Чтобы сохранить копию атрибутов, используйте методcopy()объекта attrs.
-
ContentHandler.endElement(name) -
Сообщает об окончании элемента в режиме без пространств имён.
Параметр name содержит имя типа элемента, как и в событии
startElement().
-
ContentHandler.startElementNS(name, qname, attrs) -
Сообщает о начале элемента в режиме пространств имён.
Параметр name содержит имя типа элемента в виде кортежа
(uri, localname), параметр qname содержит исходное имя XML 1.0, использованное в исходном документе, а параметр attrs содержит экземпляр интерфейсаAttributesNS(см. Интерфейс AttributesNS) с атрибутами элемента. Если элементу не сопоставлено пространство имён, компонент uri параметра name будет равенNone. Объект, переданный в attrs, может повторно использоваться анализатором; сохранение ссылки на него не является надёжным способом сохранить копию атрибутов. Чтобы сохранить копию атрибутов, используйте методcopy()объекта attrs.Анализаторы могут присваивать параметру qname значение
None, если не включена возможностьfeature_namespace_prefixes.
-
ContentHandler.endElementNS(name, qname) -
Сообщает об окончании элемента в режиме пространств имён.
Параметр name содержит имя типа элемента, как и в методе
startElementNS(); то же относится и к параметру qname.
-
ContentHandler.characters(content) -
Получает уведомление о символьных данных.
Анализатор вызывает этот метод для передачи каждого фрагмента символьных данных. Анализаторы SAX могут возвращать все непрерывные символьные данные одним фрагментом или разбивать их на несколько фрагментов; однако все символы в одном событии должны происходить из одной и той же внешней сущности, чтобы Locator предоставлял полезную информацию.
content может быть экземпляром строки или байтов; модуль читателя
expatвсегда возвращает строки.Примечание
В более раннем интерфейсе SAX 1, предоставленном специальной группой Python XML, для этого метода использовался интерфейс, более похожий на Java. Поскольку большинство анализаторов, используемых в Python, не задействовали старый интерфейс, вместо него была выбрана более простая сигнатура. Чтобы преобразовать старый код для работы с новым интерфейсом, используйте content вместо выделения части содержимого с помощью старых параметров offset и length.
-
ContentHandler.ignorableWhitespace(whitespace) -
Получает уведомление о незначащих пробельных символах в содержимом элемента.
Проверяющие анализаторы должны использовать этот метод для передачи каждого фрагмента незначащих пробельных символов (см. рекомендацию W3C XML 1.0, раздел 2.10); непроверяющие анализаторы также могут использовать этот метод, если способны разбирать и использовать модели содержимого.
Анализаторы SAX могут возвращать все непрерывные пробельные символы одним фрагментом или разбивать их на несколько фрагментов; однако все символы в одном событии должны происходить из одной и той же внешней сущности, чтобы Locator предоставлял полезную информацию.
-
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) -
Вызывается, когда анализатор передаёт приложению сведения о незначительном предупреждении. Предполагается, что после возврата из этого метода разбор продолжится, а информация о документе продолжит передаваться приложению. Вызов исключения в этом методе приведёт к завершению разбора.
Объекты LexicalHandler
Необязательный обработчик SAX2 для лексических событий.
Этот обработчик используется для получения лексической информации об XML-документе. Лексическая информация включает сведения о кодировке документа и встроенных в него комментариях XML, а также о границах разделов DTD и любых разделов CDATA. Лексические обработчики используются так же, как обработчики содержимого.
Назначьте LexicalHandler для XMLReader с помощью метода setProperty и идентификатора свойства 'http://xml.org/sax/properties/lexical-handler'.
-
LexicalHandler.comment(content) -
Сообщает о комментарии в любом месте документа (включая DTD и область вне элемента документа).
-
LexicalHandler.startDTD(name, public_id, system_id) -
Сообщает о начале объявлений DTD, если документ связан с DTD.
-
LexicalHandler.endDTD() -
Сообщает об окончании объявления DTD.
-
LexicalHandler.startCDATA() -
Сообщает о начале раздела CDATA.
Содержимое раздела CDATA передаётся через обработчик characters.
-
LexicalHandler.endCDATA() -
Сообщает об окончании раздела CDATA.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/xml.sax.handler.html