# 19.13. `xml.sax.saxutils` --- SAX ユーティリティ

バージョン 2.0 で追加.

モジュール `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 が与えられるかどうかに関わらず、常に元の文字に戻します。

  バージョン 2.3 で追加.

`xml.sax.saxutils.``quoteattr`(data[, entities])

  `escape()` に似ていますが、 data は属性値の作成に使われます。戻り値はクォート済みの data で、置換する文字の追加も可能です。 `quoteattr()` はクォートすべき文字を data の文脈から判断し、クォートすべき文字を残さないように文字列をエンコードします。 data の中にシングル・クォート、ダブル・クォートがあれば、両方ともエンコードし、全体をダブルクォートで囲みます。戻り値の文字列はそのままで属性値として利用できます:

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

  この関数は参照具象構文を使って、 HTML や SGML の属性値を生成するのに便利です。

  バージョン 2.2 で追加.

class `xml.sax.saxutils.``XMLGenerator`([out[, encoding]])

  このクラスは `ContentHandler` インターフェースの実装で、SAX イベントを XML ドキュメントに書き戻します。つまり、 `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()` に渡すことが可能になります。