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
¶ - значение:
"http://xml.org/sax/features/namespaces"
истина: Выполнить обработку пространства имен.ложь: Необязательно не выполнять обработку пространства имен (подразумеваются префиксы пространства имен; по умолчанию).доступ: (парсинг) только для чтения; (не парсинг) чтение/запись
-
xml.sax.handler.
feature_namespace_prefixes
¶ - значение:
"http://xml.org/sax/features/namespace-prefixes"
истина: Сообщить исходные префиксные имена и атрибуты используемый для объявлений пространства имен.ложь: не сообщайте атрибуты используемый для объявлений пространства имен, и необязательно не сообщайте исходные префиксные имена (по умолчанию).доступ: (парсинг) только для чтения; (не парсинг) чтение/запись
-
xml.sax.handler.
feature_string_interning
¶ - значение:
"http://xml.org/sax/features/string-interning"
истина: Все имена элементов, префиксы, имена атрибут, URI пространства имен и локальные имена интернируются с помощью встроенной внутренней функции.ложь: Имена не обязательно интернируются, хотя могут (по умолчанию).доступ: (парсинг) только для чтения; (не парсинг) чтение/запись
-
xml.sax.handler.
feature_validation
¶ - значение:
"http://xml.org/sax/features/validation"
истина: Сообщите обо всех ошибках проверки (подразумевает внешние-общие-сущности и внешние-параметры-сущности).ложь: Не сообщать об ошибках проверки.доступ: (парсинг) только для чтения; (не парсинг) чтение/запись
-
xml.sax.handler.
feature_external_ges
¶ - значение:
"http://xml.org/sax/features/external-general-entities"
истина: Включить все внешние общие (текстовые) объекты.ложь: Не включать внешние общие объекты.доступ: (парсинг) только для чтения; (не парсинг) чтение/запись
-
xml.sax.handler.
feature_external_pes
¶ - значение:
"http://xml.org/sax/features/external-parameter-entities"
истина: Включить все внешние объекты параметров, включая внешнее подмножество DTD.ложь: Не включать внешние объекты параметров, даже внешнее подмножество DTD.доступ: (парсинг) только для чтения; (не парсинг) чтение/запись
-
xml.sax.handler.
all_features
¶ Список всех функций.
-
xml.sax.handler.
property_lexical_handler
¶ - значение:
"http://xml.org/sax/properties/lexical-handler"
тип данных: xml.sax.sax2lib.LexicalHandler (не поддерживается в Python 2)описание: Дополнительный обработчик расширения для лексических событий, таких как комментарии.доступ: чтение/запись
-
xml.sax.handler.
property_declaration_handler
¶ - значение:
"http://xml.org/sax/properties/declaration-handler"
тип данных: xml.sax.sax2lib.DeclHandler (не поддерживается в Python 2)описание: Необязательное расширение, обработчик для событий, связанных с DTD, кроме обозначений и необработанных сущностей.доступ: чтение/запись
-
xml.sax.handler.
property_dom_node
¶ - значение:
"http://xml.org/sax/properties/dom-node"
тип данных: org.w3c.dom.Node (не поддерживается в Python 2)описание: При парсинге текущего посещаемого узела DOM, если это итератор DOM; если не парсинг, корневого узела DOM для итерации.доступ: (парсинг) только для чтения; (не парсинг) чтение/запись
-
xml.sax.handler.
property_xml_string
¶ - значение:
"http://xml.org/sax/properties/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.
Информация из этого события не нужна для обычной обработки пространства имен: устройство чтения XML SAX автоматически заменяет префиксы для имен элементов и атрибут, когда функция
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, может быть re-используемый парсер; сохранение ссылки на нее не является надежным способом хранения копии атрибуты. Чтобы сохранить копию атрибуты, используйте метод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 парсерами может возвращает все смежные символ данные в одном чанк или они могут разделить их на несколько чанки; однако все символы в любом отдельном событии должны исходить от одного и того же внешнего объекта, чтобы локатор предоставлял полезную информацию.
content может быть строка или сущность байтов; модуль считывателя
expat
всегда производит строки.Примечание
Более ранний интерфейс SAX 1, предоставленный группой специальных интересов Python XML, используемый более Java-подобным интерфейсом для этого метода. Поскольку большинство парсерами используемый от Python не воспользовались преимуществом более старого интерфейса, для его замены был выбран более простой сигнатура. Чтобы преобразовать старые код в новый интерфейс, используйте 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)¶ Вызывается, когда парсер представляет приложению незначительную предупреждающую информацию. Ожидается, что синтаксический анализ будет продолжен после возвращает этого метода, и информация о документе будет по-прежнему передаваться приложению. Создание исключения в этом методе приведет к завершению парсинга.