Документация Python неофициальный перевод

xml.sax.md

92 строк · 13.0 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.7/library/xml.sax.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`xml.sax`](https://python-all.ru/3.7/library/xml.sax.html#module-xml.sax) – Поддержка парсеров SAX289**Исходный код:** [Lib/xml/sax/\_\_init\_\_.py](https://python-all.ru/src/3.7/Lib/xml/sax/__init__.py)1011---1213Пакет [`xml.sax`](https://python-all.ru/3.7/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.7/library/xml.sax.html#module-xml.sax) не защищён от вредоносных данных. Если требуется разбирать непроверенные или неаутентифицированные данные, см. [уязвимости XML](https://python-all.ru/3.7/library/xml.html#xml-vulnerabilities).1819Изменено в версии 3.7.1: Парсер SAX больше не обрабатывает обычные внешние сущности по умолчанию для повышения безопасности. Раньше парсер создавал сетевые соединения для загрузки удаленных файлов или загружал локальные файлы из файловой системы для DTD и сущностей. Эту возможность можно снова включить с помощью метода [`setFeature()`](https://python-all.ru/3.7/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.setFeature) объекта парсера и аргумента [`feature_external_ges`](https://python-all.ru/3.7/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.7/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.7/library/xml.sax.handler.html#xml.sax.handler.ContentHandler). Если указан *error\_handler*, он должен быть экземпляром SAX [`ErrorHandler`](https://python-all.ru/3.7/library/xml.sax.handler.html#xml.sax.handler.ErrorHandler); если он опущен, при всех ошибках будет возбуждаться [`SAXParseException`](https://python-all.ru/3.7/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.7/library/xml.sax.html#xml.sax.parse), но разбирает из буфера *string*, полученного в качестве параметра. *string* должен быть экземпляром [`str`](https://python-all.ru/3.7/library/stdtypes.html#str) или [объектом, подобным bytes](https://python-all.ru/3.7/glossary.html#term-bytes-like-object).3435Изменено в версии 3.5: Добавлена поддержка экземпляров [`str`](https://python-all.ru/3.7/library/stdtypes.html#str).3637Типичное SAX-приложение использует три вида объектов: читатели, обработчики и источники входных данных. «Читатель» в этом контексте – ещё один термин для парсера, т.е. некоторый код, который читает байты или символы из источника входных данных и порождает последовательность событий. Затем эти события распределяются по объектам-обработчикам: читатель вызывает метод на обработчике. Таким образом, SAX-приложение должно получить объект-читатель, создать или открыть источники входных данных, создать обработчики и соединить все эти объекты вместе. На последнем этапе подготовки вызывается читатель для разбора входных данных. Во время разбора вызываются методы объектов-обработчиков на основе структурных и синтаксических событий из входных данных.3839Для этих объектов важны только интерфейсы; обычно они не создаются самим приложением. Поскольку в Python нет явного понятия интерфейса, они формально представлены как классы, но приложения могут использовать реализации, которые не наследуются от предоставленных классов. Интерфейсы [`InputSource`](https://python-all.ru/3.7/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource), [`Locator`](https://python-all.ru/3.7/library/xml.sax.reader.html#xml.sax.xmlreader.Locator), `Attributes`, `AttributesNS` и [`XMLReader`](https://python-all.ru/3.7/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) определены в модуле [`xml.sax.xmlreader`](https://python-all.ru/3.7/library/xml.sax.reader.html#module-xml.sax.xmlreader). Интерфейсы обработчиков определены в [`xml.sax.handler`](https://python-all.ru/3.7/library/xml.sax.handler.html#module-xml.sax.handler). Для удобства [`InputSource`](https://python-all.ru/3.7/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource) (который часто создаётся напрямую) и классы обработчиков также доступны из [`xml.sax`](https://python-all.ru/3.7/library/xml.sax.html#module-xml.sax). Эти интерфейсы описаны ниже.4041В дополнение к этим классам [`xml.sax`](https://python-all.ru/3.7/library/xml.sax.html#module-xml.sax) предоставляет следующие классы исключений.4243#### `exception xml.sax.SAXException(msg, exception=None)`4445Инкапсулирует ошибку или предупреждение XML. Этот класс может содержать базовую информацию об ошибке или предупреждении как от XML-парсера, так и от приложения; его можно расширить для добавления дополнительной функциональности или локализации. Обратите внимание, что хотя обработчики, определённые в интерфейсе [`ErrorHandler`](https://python-all.ru/3.7/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.7/library/xml.sax.html#xml.sax.SAXException), возбуждаемый при ошибках разбора. Экземпляры этого класса передаются методам интерфейса SAX [`ErrorHandler`](https://python-all.ru/3.7/library/xml.sax.handler.html#xml.sax.handler.ErrorHandler) для предоставления информации об ошибке разбора. Этот класс поддерживает интерфейсы SAX [`Locator`](https://python-all.ru/3.7/library/xml.sax.reader.html#xml.sax.xmlreader.Locator) и [`SAXException`](https://python-all.ru/3.7/library/xml.sax.html#xml.sax.SAXException).5455#### `exception xml.sax.SAXNotRecognizedException(msg, exception=None)`5657Подкласс [`SAXException`](https://python-all.ru/3.7/library/xml.sax.html#xml.sax.SAXException), возбуждаемый, когда SAX [`XMLReader`](https://python-all.ru/3.7/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.7/library/xml.sax.html#xml.sax.SAXException), возбуждаемый, когда SAX [`XMLReader`](https://python-all.ru/3.7/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) просят включить неподдерживаемую возможность или установить свойство в значение, которое не поддерживается реализацией. SAX-приложения и расширения могут использовать этот класс для аналогичных целей.6263> **См. также**64>65> **[SAX: Простой API для XML](https://python-all.ru/3.7/library/xml.sax.html)**66>67> Этот сайт является центром определения SAX API. Он предоставляет реализацию на Java и онлайн-документацию. Также доступны ссылки на реализации и историческую информацию.68>69> **Модуль [`xml.sax.handler`](https://python-all.ru/3.7/library/xml.sax.handler.html#module-xml.sax.handler)**70>71> Определения интерфейсов для объектов, предоставляемых приложением.72>73> **Модуль [`xml.sax.saxutils`](https://python-all.ru/3.7/library/xml.sax.utils.html#module-xml.sax.saxutils)**74>75> Удобные функции для использования в SAX-приложениях.76>77> **Модуль [`xml.sax.xmlreader`](https://python-all.ru/3.7/library/xml.sax.reader.html#module-xml.sax.xmlreader)**78>79> Определения интерфейсов для объектов, предоставляемых парсером.8081## Объекты SAXException8283Класс исключений [`SAXException`](https://python-all.ru/3.7/library/xml.sax.html#xml.sax.SAXException) поддерживает следующие методы:8485#### `SAXException.getMessage()`8687Возвращает понятное человеку сообщение, описывающее условие ошибки.8889#### `SAXException.getException()`9091Возвращает инкапсулированный объект исключения или `None`.92