# `xml.sax.saxutils` --- SAX 工具程式

原始碼：Lib/xml/sax/saxutils.py

The module `xml.sax.saxutils` contains a number of classes and functions that are commonly useful when creating SAX applications, either in direct use, or as base classes.

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

  在資料字串中跳脫 `'&'`、`'<'` 及 `'>'`。

  你可以透過傳入字典作為可選的 entities 參數，來跳脫其他資料字串。鍵和值都必須是字串；每個鍵都會被對應的值取代。即使提供 entities，`'&'`、`'<'` 和 `'>'` 字元始終會被跳脫。

  備註

  這個函式只能用來跳脫 XML 中無法直接使用的字元。請勿將此函式用作一般的字串轉換函式。

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

  取消跳脫資料字串中的 `'&amp;'`、`'&lt;'` 和 `'&gt;'`。

  你可以透過傳入字典作為可選的 entities 參數，來取消其他字串的資料。鍵和值都必須是字串；每個鍵都會被對應的值取代。即使提供了 entities，`'&amp;'`、`'&lt;’` 和 `‘&gt;'` 總是會取消跳脫。

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

  類似於 `escape()`，但也準備 data 作為屬性值。`quoteattr()` 會根據 data 的內容選擇引號字元，嘗試避免在字串中編碼任何引號字元。如果 data 中已經有單引號和雙引號字元，雙引號字元將被編碼，而 data 將被雙引號包覆。結果字串可直接用作屬性值：

      >>> 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)

  這個類別透過將 SAX 事件寫回 XML 文件來實作 `ContentHandler` 介面。換句話說，使用 `XMLGenerator` 作為內容處理器將會重現被剖析的原始文件。out 應該是類檔案物件，預設為 sys.stdout。encoding 是輸出串流的編碼，預設為 `'iso-8859-1'`。short_empty_elements 控制不包含內容的元素的格式：如果設定為 `False`（預設值），它們會以一對開始/結束（start/end）標籤的形式輸出；如果設定為 `True`，它們會以單一自封（self-closed）標籤的形式輸出。

  在 3.2 版的變更: 新增 short_empty_elements 參數。

class xml.sax.saxutils.XMLFilterBase(base)

  這個類別的設計是在 `XMLReader` 與用戶端應用程式的事件處理程式之間。預設情況下，它什麼都不做，只是將要求傳送到閱讀器，並將事件未經修改地傳送到處理程式，但子類別可以覆寫特定的方法，以在傳送它們的時候修改事件串流或配置請求。

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

  這個函式接收一個輸入來源和一個可選的基底 URL，並回傳一個完全解析的 `InputSource` 物件，以準備讀取。輸入來源可以是字串、類檔案物件或 `InputSource` 物件；剖析器會使用這個函式來實作它們的 `parse()` 方法的多型 source 引數。