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

---

# 19.9. `xml.sax.saxutils` – Утилиты SAX

Модуль `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.1/library/xml.sax.utils.html#xml.sax.saxutils.escape), но также подготавливает *data* для использования в качестве значения атрибута. Возвращаемое значение – это строка *data*, заключённая в кавычки, с дополнительными необходимыми заменами. [`quoteattr()`](https://python-all.ru/3.1/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')`

Этот класс реализует интерфейс

`ContentHandler`

, записывая SAX-события обратно в XML-документ. Другими словами, использование

[`XMLGenerator`](https://python-all.ru/3.1/library/xml.sax.utils.html#xml.sax.saxutils.XMLGenerator)

в качестве обработчика содержимого воспроизводит исходный разбираемый документ.

*out*

должен быть файлоподобным объектом; по умолчанию используется

*sys.stdout*

.

*encoding*

– это кодировка выходного потока; по умолчанию

`'iso-8859-1'`

.

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

Этот класс предназначен для размещения между

`XMLReader`

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

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

Эта функция принимает входной источник и необязательный базовый URL и возвращает полностью разрешённый объект

`InputSource`

, готовый для чтения. Входной источник может быть задан как строка, файлоподобный объект или объект

`InputSource`

; парсеры используют эту функцию для реализации полиморфного аргумента

*source*

в своём методе

`parse()`

.
