xml.sax.utils.md
1> **Источник:** https://python-all.ru/3.4/library/xml.sax.utils.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.11. [`xml.sax.saxutils`](https://python-all.ru/3.4/library/xml.sax.utils.html#module-xml.sax.saxutils) – Утилиты SAX89Модуль [`xml.sax.saxutils`](https://python-all.ru/3.4/library/xml.sax.utils.html#module-xml.sax.saxutils) содержит ряд классов и функций, которые часто бывают полезны при создании SAX-приложений – как при непосредственном использовании, так и в качестве базовых классов.1011#### `xml.sax.saxutils.escape(data, entities={})`1213Экранирует `'&'`, `'<'` и `'>'` в строке данных.1415Можно экранировать другие строки данных, передав словарь в качестве необязательного параметра *entities*. Ключи и значения должны быть строками; каждый ключ будет заменён соответствующим значением. Символы `'&'`, `'<'` и `'>'` всегда экранируются, даже если указан *entities*.1617#### `xml.sax.saxutils.unescape(data, entities={})`1819Раскодирует `'&'`, `'<'` и `'>'` в строке данных.2021Можно раскодировать другие строки данных, передав словарь в качестве необязательного параметра *entities*. Ключи и значения должны быть строками; каждый ключ будет заменён соответствующим значением. `'&'`, `'<'` и `'>'` всегда раскодируются, даже если передан *entities*.2223#### `xml.sax.saxutils.quoteattr(data, entities={})`2425Аналогична [`escape()`](https://python-all.ru/3.4/library/xml.sax.utils.html#xml.sax.saxutils.escape), но также подготавливает *data* для использования в качестве значения атрибута. Возвращаемое значение – это строка *data*, заключённая в кавычки, с дополнительными необходимыми заменами. [`quoteattr()`](https://python-all.ru/3.4/library/xml.sax.utils.html#xml.sax.saxutils.quoteattr) выбирает символ кавычки на основе содержимого *data*, стараясь избежать кодирования кавычек в строке. Если в *data* уже присутствуют и одинарные, и двойные кавычки, то двойные кавычки будут закодированы, а *data* будет заключена в двойные кавычки. Полученную строку можно напрямую использовать в качестве значения атрибута:2627```python28>>> print("<element attr=%s>" % quoteattr("ab ' cd \" ef"))29<element attr="ab ' cd " ef">30```3132Эта функция полезна при генерации значений атрибутов для HTML или любого SGML с использованием эталонного конкретного синтаксиса.3334#### `class xml.sax.saxutils.XMLGenerator(out=None, encoding='iso-8859-1', short_empty_elements=False)`3536Этот класс реализует интерфейс [`ContentHandler`](https://python-all.ru/3.4/library/xml.sax.handler.html#xml.sax.handler.ContentHandler), записывая события SAX обратно в XML-документ. Иными словами, использование [`XMLGenerator`](https://python-all.ru/3.4/library/xml.sax.utils.html#xml.sax.saxutils.XMLGenerator) в качестве обработчика содержимого воспроизведёт исходный анализируемый документ. *out* должен быть файлоподобным объектом (по умолчанию *sys.stdout*). *encoding* – кодировка выходного потока (по умолчанию `'iso-8859-1'`). *short\_empty\_elements* управляет форматированием элементов без содержимого: если *False* (по умолчанию), они выводятся как пара открывающего и закрывающего тегов; если *True*, то как один самозакрывающийся тег.3738Новое в версии 3.2: параметр *short\_empty\_elements*.3940#### `class xml.sax.saxutils.XMLFilterBase(base)`4142Этот класс предназначен для размещения между [`XMLReader`](https://python-all.ru/3.4/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) и обработчиками событий клиентского приложения. По умолчанию он ничего не делает, только передаёт запросы наверх читателю, а события – обработчикам без изменений, но подклассы могут переопределять определённые методы для изменения потока событий или запросов конфигурации при их прохождении.4344#### `xml.sax.saxutils.prepare_input_source(source, base='')`4546Эта функция принимает источник входных данных и необязательный базовый URL и возвращает полностью разрешённый объект [`InputSource`](https://python-all.ru/3.4/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource), готовый к чтению. Источник входных данных может быть задан как строка, файлоподобный объект или объект [`InputSource`](https://python-all.ru/3.4/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource); синтаксические анализаторы используют эту функцию для реализации полиморфного аргумента *source* для своего метода `parse()`.47