xml.sax.md
1> **Источник:** https://python-all.ru/3.6/library/xml.sax.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.9. [`xml.sax`](https://python-all.ru/3.6/library/xml.sax.html#module-xml.sax) – Поддержка парсеров SAX289**Исходный код:** [Lib/xml/sax/\_\_init\_\_.py](https://python-all.ru/src/3.6/Lib/xml/sax/__init__.py)1011---1213Пакет [`xml.sax`](https://python-all.ru/3.6/library/xml.sax.html#module-xml.sax) предоставляет несколько модулей, реализующих интерфейс Simple API for XML (SAX) для Python. Сам пакет предоставляет исключения SAX и удобные функции, которые чаще всего используются пользователями SAX API.1415> **Предупреждение**16>17> Модуль [`xml.sax`](https://python-all.ru/3.6/library/xml.sax.html#module-xml.sax) не защищён от вредоносных данных. Если требуется разбирать непроверенные или неаутентифицированные данные, см. [уязвимости XML](https://python-all.ru/3.6/library/xml.html#xml-vulnerabilities).1819Изменено в версии 3.6.7: По умолчанию парсер SAX больше не обрабатывает общие внешние сущности для повышения безопасности. Раньше парсер создавал сетевые соединения для загрузки удалённых файлов или загружал локальные файлы из файловой системы для DTD и сущностей. Эту возможность можно снова включить с помощью метода [`setFeature()`](https://python-all.ru/3.6/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.setFeature) объекта парсера и аргумента [`feature_external_ges`](https://python-all.ru/3.6/library/xml.sax.handler.html#xml.sax.handler.feature_external_ges).2021Удобные функции:2223#### `xml.sax.make_parser(parser_list=[])`2425Создаёт и возвращает объект SAX [`XMLReader`](https://python-all.ru/3.6/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader). Будет использован первый найденный парсер. Если передан *parser\_list*, это должен быть список строк, которые называют модули, в которых есть функция с именем `create_parser()`. Модули, перечисленные в *parser\_list* будут использоваться раньше модулей из списка парсеров по умолчанию.2627#### `xml.sax.parse(filename_or_stream, handler, error_handler=handler.ErrorHandler())`2829Создаёт парсер SAX и использует его для разбора документа. Документ, передаваемый как *filename\_or\_stream*, может быть именем файла или файловым объектом. Параметр *handler* должен быть экземпляром SAX [`ContentHandler`](https://python-all.ru/3.6/library/xml.sax.handler.html#xml.sax.handler.ContentHandler). Если указан *error\_handler*, он должен быть экземпляром SAX [`ErrorHandler`](https://python-all.ru/3.6/library/xml.sax.handler.html#xml.sax.handler.ErrorHandler); если он опущен, при всех ошибках будет возбуждаться [`SAXParseException`](https://python-all.ru/3.6/library/xml.sax.html#xml.sax.SAXParseException). Возвращаемое значение отсутствует; вся работа должна выполняться переданным *handler*.3031#### `xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())`3233Аналогично [`parse()`](https://python-all.ru/3.6/library/xml.sax.html#xml.sax.parse), но разбирает из буфера *string*, полученного в качестве параметра. *string* должен быть экземпляром [`str`](https://python-all.ru/3.6/library/stdtypes.html#str) или [объектом, подобным bytes](https://python-all.ru/3.6/glossary.html#term-bytes-like-object).3435Изменено в версии 3.5: Добавлена поддержка экземпляров [`str`](https://python-all.ru/3.6/library/stdtypes.html#str).3637Типичное SAX-приложение использует три вида объектов: читатели, обработчики и источники входных данных. «Читатель» в этом контексте – ещё один термин для парсера, т.е. некоторый код, который читает байты или символы из источника входных данных и порождает последовательность событий. Затем эти события распределяются по объектам-обработчикам: читатель вызывает метод на обработчике. Таким образом, SAX-приложение должно получить объект-читатель, создать или открыть источники входных данных, создать обработчики и соединить все эти объекты вместе. На последнем этапе подготовки вызывается читатель для разбора входных данных. Во время разбора вызываются методы объектов-обработчиков на основе структурных и синтаксических событий из входных данных.3839Для этих объектов важны только интерфейсы; обычно они не создаются самим приложением. Поскольку в Python нет явного понятия интерфейса, они формально представлены как классы, но приложения могут использовать реализации, которые не наследуются от предоставленных классов. Интерфейсы [`InputSource`](https://python-all.ru/3.6/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource), [`Locator`](https://python-all.ru/3.6/library/xml.sax.reader.html#xml.sax.xmlreader.Locator), `Attributes`, `AttributesNS` и [`XMLReader`](https://python-all.ru/3.6/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) определены в модуле [`xml.sax.xmlreader`](https://python-all.ru/3.6/library/xml.sax.reader.html#module-xml.sax.xmlreader). Интерфейсы обработчиков определены в [`xml.sax.handler`](https://python-all.ru/3.6/library/xml.sax.handler.html#module-xml.sax.handler). Для удобства [`InputSource`](https://python-all.ru/3.6/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource) (который часто создаётся напрямую) и классы обработчиков также доступны из [`xml.sax`](https://python-all.ru/3.6/library/xml.sax.html#module-xml.sax). Эти интерфейсы описаны ниже.4041В дополнение к этим классам [`xml.sax`](https://python-all.ru/3.6/library/xml.sax.html#module-xml.sax) предоставляет следующие классы исключений.4243#### `exception xml.sax.SAXException(msg, exception=None)`4445Инкапсулирует ошибку или предупреждение XML. Этот класс может содержать базовую информацию об ошибке или предупреждении как от XML-парсера, так и от приложения; его можно расширить для добавления дополнительной функциональности или локализации. Обратите внимание, что хотя обработчики, определённые в интерфейсе [`ErrorHandler`](https://python-all.ru/3.6/library/xml.sax.handler.html#xml.sax.handler.ErrorHandler), получают экземпляры этого исключения, фактически возбуждать исключение не требуется – он также полезен как контейнер для информации.4647При создании экземпляра *msg* должен быть человекочитаемым описанием ошибки. Необязательный параметр *исключение*, если задан, должен быть `None` или исключением, которое было перехвачено кодом разбора и передаётся как информация.4849Это базовый класс для других классов исключений SAX.5051#### `exception xml.sax.SAXParseException(msg, exception, locator)`5253Подкласс [`SAXException`](https://python-all.ru/3.6/library/xml.sax.html#xml.sax.SAXException), возбуждаемый при ошибках разбора. Экземпляры этого класса передаются методам интерфейса SAX [`ErrorHandler`](https://python-all.ru/3.6/library/xml.sax.handler.html#xml.sax.handler.ErrorHandler) для предоставления информации об ошибке разбора. Этот класс поддерживает интерфейсы SAX [`Locator`](https://python-all.ru/3.6/library/xml.sax.reader.html#xml.sax.xmlreader.Locator) и [`SAXException`](https://python-all.ru/3.6/library/xml.sax.html#xml.sax.SAXException).5455#### `exception xml.sax.SAXNotRecognizedException(msg, exception=None)`5657Подкласс [`SAXException`](https://python-all.ru/3.6/library/xml.sax.html#xml.sax.SAXException), возбуждаемый, когда SAX [`XMLReader`](https://python-all.ru/3.6/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) сталкивается с неизвестной функцией или свойством. SAX-приложения и расширения могут использовать этот класс для аналогичных целей.5859#### `exception xml.sax.SAXNotSupportedException(msg, exception=None)`6061Подкласс [`SAXException`](https://python-all.ru/3.6/library/xml.sax.html#xml.sax.SAXException), возбуждаемый, когда SAX [`XMLReader`](https://python-all.ru/3.6/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) просят включить неподдерживаемую возможность или установить свойство в значение, которое не поддерживается реализацией. SAX-приложения и расширения могут использовать этот класс для аналогичных целей.6263> **См. также**64>65> **[SAX: Простой API для XML](https://python-all.ru/3.6/library/xml.sax.html)**66>67> Этот сайт является центром определения SAX API. Он предоставляет реализацию на Java и онлайн-документацию. Также доступны ссылки на реализации и историческую информацию.68>69> **Модуль [`xml.sax.handler`](https://python-all.ru/3.6/library/xml.sax.handler.html#module-xml.sax.handler)**70>71> Определения интерфейсов для объектов, предоставляемых приложением.72>73> **Модуль [`xml.sax.saxutils`](https://python-all.ru/3.6/library/xml.sax.utils.html#module-xml.sax.saxutils)**74>75> Удобные функции для использования в SAX-приложениях.76>77> **Модуль [`xml.sax.xmlreader`](https://python-all.ru/3.6/library/xml.sax.reader.html#module-xml.sax.xmlreader)**78>79> Определения интерфейсов для объектов, предоставляемых парсером.8081## 20.9.1. Объекты SAXException8283Класс исключений [`SAXException`](https://python-all.ru/3.6/library/xml.sax.html#xml.sax.SAXException) поддерживает следующие методы:8485#### `SAXException.getMessage()`8687Возвращает понятное человеку сообщение, описывающее условие ошибки.8889#### `SAXException.getException()`9091Возвращает инкапсулированный объект исключения или `None`.92