> **Источник:** https://python-all.ru/3.2/library/xml.sax.utils.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 19.12. [`xml.sax.saxutils`](https://python-all.ru/3.2/library/xml.sax.utils.html#module-xml.sax.saxutils) – Утилиты SAX

Модуль [`xml.sax.saxutils`](https://python-all.ru/3.2/library/xml.sax.utils.html#module-xml.sax.saxutils) содержит ряд классов и функций, которые часто бывают полезны при создании SAX-приложений – как при непосредственном использовании, так и в качестве базовых классов.

#### `xml.sax.saxutils.escape(data, entities={})`

Экранирует `'&'`, `'<'` и `'>'` в строке данных.

Можно экранировать другие строки данных, передав словарь в качестве необязательного параметра *entities*. Ключи и значения должны быть строками; каждый ключ будет заменён соответствующим значением. Символы `'&'`, `'<'` и `'>'` всегда экранируются, даже если указан *entities*.

#### `xml.sax.saxutils.unescape(data, entities={})`

Раскодирует `'&amp;'`, `'&lt;'` и `'&gt;'` в строке данных.

Можно раскодировать другие строки данных, передав словарь в качестве необязательного параметра *entities*. Ключи и значения должны быть строками; каждый ключ будет заменён соответствующим значением. `'&amp'`, `'&lt;'` и `'&gt;'` всегда раскодируются, даже если передан *entities*.

#### `xml.sax.saxutils.quoteattr(data, entities={})`

Аналогична [`escape()`](https://python-all.ru/3.2/library/xml.sax.utils.html#xml.sax.saxutils.escape), но также подготавливает *data* для использования в качестве значения атрибута. Возвращаемое значение – это строка *data*, заключённая в кавычки, с дополнительными необходимыми заменами. [`quoteattr()`](https://python-all.ru/3.2/library/xml.sax.utils.html#xml.sax.saxutils.quoteattr) выбирает символ кавычки на основе содержимого *data*, стараясь избежать кодирования кавычек в строке. Если в *data* уже присутствуют и одинарные, и двойные кавычки, то двойные кавычки будут закодированы, а *data* будет заключена в двойные кавычки. Полученную строку можно напрямую использовать в качестве значения атрибута:

```python
>>> print("<element attr=%s>" % quoteattr("ab ' cd \" ef"))
<element attr="ab ' cd &quot; ef">
```

Эта функция полезна при генерации значений атрибутов для HTML или любого SGML с использованием эталонного конкретного синтаксиса.

#### `class xml.sax.saxutils.XMLGenerator(out=None, encoding='iso-8859-1', short_empty_elements=False)`

Этот класс реализует интерфейс `ContentHandler`, записывая события SAX обратно в XML-документ. Другими словами, использование [`XMLGenerator`](https://python-all.ru/3.2/library/xml.sax.utils.html#xml.sax.saxutils.XMLGenerator) в качестве обработчика содержимого позволяет воспроизвести исходный разбираемый документ. Параметр *out* должен быть файлоподобным объектом; по умолчанию используется *sys.stdout*. *encoding* – это кодировка выходного потока, по умолчанию равная `'iso-8859-1'`. Параметр *short\_empty\_elements* управляет форматированием элементов без содержимого: если он равен *False* (значение по умолчанию), такие элементы выводятся как пара начального и конечного тегов, а если установлен в *True* – как один самозакрывающийся тег.

Новое в версии 3.2: short\_empty\_elements

#### `class xml.sax.saxutils.XMLFilterBase(base)`

Этот класс предназначен для размещения между `XMLReader` и обработчиками событий клиентского приложения. По умолчанию он только передаёт запросы на чтение и события обработчикам без изменений, но подклассы могут переопределять отдельные методы, чтобы модифицировать поток событий или запросы конфигурации по мере их прохождения.

#### `xml.sax.saxutils.prepare_input_source(source, base='')`

Эта функция принимает входной источник и необязательный базовый URL и возвращает полностью разрешённый объект `InputSource`, готовый для чтения. Входной источник может быть задан как строка, файлоподобный объект или объект `InputSource`; парсеры используют эту функцию для реализации полиморфного аргумента *source* в своём методе `parse()`.
