Содержание страницы
20.9. xml.sax – Поддержка парсеров SAX2¶xml.sax – Support for SAX2 parsers
Пакет xml.sax предоставляет несколько модулей, реализующих интерфейс Simple API for XML (SAX) для Python. Сам пакет предоставляет исключения SAX и вспомогательные функции, которые наиболее часто используются пользователями SAX API.
Предупреждение
Модуль xml.sax не является безопасным для вредоносных данных. Если необходимо обрабатывать непроверенные или неаутентифицированные данные, обратитесь к разделу Уязвимости XML.
Удобные функции:
- xml.sax.make_parser(parser_list=[])¶
Создаёт и возвращает объект SAX XMLReader. Будет использован первый найденный парсер. Если указан параметр parser_list, он должен быть последовательностью строк, которые называют модули, содержащие функцию create_parser(). Модули из parser_list будут использоваться перед модулями из списка парсеров по умолчанию.
- xml.sax.parse(filename_or_stream, handler, error_handler=handler.ErrorHandler())¶
Создаёт парсер SAX и использует его для разбора документа. Документ, передаваемый как filename_or_stream, может быть именем файла или файловым объектом. Параметр handler должен быть экземпляром SAX ContentHandler. Если указан error_handler, он должен быть экземпляром SAX ErrorHandler; если опущен, будет возбуждаться SAXParseException при всех ошибках. Возвращаемого значения нет; вся работа должна выполняться переданным handler.
- xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())¶
Аналогична parse(), но выполняет разбор из буфера string, переданного в качестве параметра.
Типичное SAX-приложение использует три вида объектов: читатели, обработчики и источники входных данных. «Читатель» в этом контексте – ещё один термин для парсера, т.е. некоторый код, который читает байты или символы из источника входных данных и порождает последовательность событий. Затем эти события распределяются по объектам-обработчикам: читатель вызывает метод на обработчике. Таким образом, SAX-приложение должно получить объект-читатель, создать или открыть источники входных данных, создать обработчики и соединить все эти объекты вместе. На последнем этапе подготовки вызывается читатель для разбора входных данных. Во время разбора вызываются методы объектов-обработчиков на основе структурных и синтаксических событий из входных данных.
Для этих объектов важны только интерфейсы; они обычно не создаются напрямую приложением. Поскольку в Python нет явного понятия интерфейса, они формально представлены как классы, но приложения могут использовать реализации, которые не наследуются от предоставленных классов. Интерфейсы InputSource, Locator, Attributes, AttributesNS и XMLReader определены в модуле xml.sax.xmlreader. Интерфейсы обработчиков определены в xml.sax.handler. Для удобства InputSource (который часто создаётся напрямую) и классы обработчиков также доступны из xml.sax. Эти интерфейсы описаны ниже.
В дополнение к этим классам, xml.sax предоставляет следующие классы исключений.
- exception xml.sax.SAXException(msg, exception=None)¶
Инкапсулирует ошибку или предупреждение XML. Этот класс может содержать базовую информацию об ошибке или предупреждении как от XML-парсера, так и от приложения; его можно подклассифицировать для добавления дополнительной функциональности или локализации. Обратите внимание, что хотя обработчики, определённые в интерфейсе ErrorHandler, получают экземпляры этого исключения, не требуется фактически возбуждать исключение – он также полезен как контейнер для информации.
При создании экземпляра msg должен быть читаемым описанием ошибки. Необязательный параметр exception, если задан, должен быть None или исключением, которое было перехвачено кодом разбора и передаётся как информация.
Это базовый класс для других классов исключений SAX.
- exception xml.sax.SAXParseException(msg, exception, locator)¶
Подкласс SAXException, возбуждаемый при ошибках разбора. Экземпляры этого класса передаются методам интерфейса SAX ErrorHandler для предоставления информации об ошибке разбора. Этот класс поддерживает интерфейс SAX Locator, а также интерфейс SAXException.
- exception xml.sax.SAXNotRecognizedException(msg, exception=None)¶
Подкласс SAXException, возбуждаемый, когда SAX XMLReader сталкивается с неизвестной возможностью или свойством. Приложения и расширения SAX могут использовать этот класс для аналогичных целей.
- exception xml.sax.SAXNotSupportedException(msg, exception=None)¶
Подкласс SAXException, возбуждаемый, когда SAX XMLReader запрашивают включение неподдерживаемой возможности или установку свойства в значение, не поддерживаемое реализацией. Приложения и расширения SAX могут использовать этот класс для аналогичных целей.
См. также
- SAX: Простой API для XML
- Этот сайт является центром определения SAX API. Он предоставляет реализацию на Java и онлайн-документацию. Также доступны ссылки на реализации и историческую информацию.
- Модуль xml.sax.handler
- Определения интерфейсов для объектов, предоставляемых приложением.
- Модуль xml.sax.saxutils
- Удобные функции для использования в SAX-приложениях.
- Модуль xml.sax.xmlreader
- Определения интерфейсов для объектов, предоставляемых парсером.
20.9.1. Объекты SAXException¶SAXException Objects
Класс исключения SAXException поддерживает следующие методы:
- SAXException.getMessage()¶
Возвращает понятное человеку сообщение, описывающее условие ошибки.
- SAXException.getException()¶
Возвращает инкапсулированный объект исключения или None.