\section{\module{xml.sax.saxutils} ---
         SAX Utilities}

\declaremodule{standard}{xml.sax.saxutils}
\modulesynopsis{Convenience functions and classes for use with SAX.}
\sectionauthor{Martin v. L\"owis}{loewis@informatik.hu-berlin.de}
\moduleauthor{Lars Marius Garshol}{larsga@garshol.priv.no}

\versionadded{2.0}


The module \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.

\begin{funcdesc}{escape}{data\optional{, entities}}
  Escape \character{\&}, \character{<}, and \character{>} in a string
  of data.

  You can escape other strings of data by passing a dictionary as the
  optional \var{entities} parameter.  The keys and values must all be
  strings; each key will be replaced with its corresponding value.
\end{funcdesc}

\begin{funcdesc}{unescape}{data\optional{, entities}}
  Unescape \character{\&amp;}, \character{\&lt;}, and \character{\&gt;}
  in a string of data.

  You can unescape other strings of data by passing a dictionary as the
  optional \var{entities} parameter.  The keys and values must all be
  strings; each key will be replaced with its corresponding value.

  \versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{quoteattr}{data\optional{, entities}}
  Similar to \function{escape()}, but also prepares \var{data} to be
  used as an attribute value.  The return value is a quoted version of
  \var{data} with any additional required replacements.
  \function{quoteattr()} will select a quote character based on the
  content of \var{data}, attempting to avoid encoding any quote
  characters in the string.  If both single- and double-quote
  characters are already in \var{data}, the double-quote characters
  will be encoded and \var{data} will be wrapped in doule-quotes.  The
  resulting string can be used directly as an attribute value:

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

  This function is useful when generating attribute values for HTML or
  any SGML using the reference concrete syntax.
  \versionadded{2.2}
\end{funcdesc}

\begin{classdesc}{XMLGenerator}{\optional{out\optional{, encoding}}}
  This class implements the \class{ContentHandler} interface by
  writing SAX events back into an XML document. In other words, using
  an \class{XMLGenerator} as the content handler will reproduce the
  original document being parsed. \var{out} should be a file-like
  object which will default to \var{sys.stdout}. \var{encoding} is the
  encoding of the output stream which defaults to \code{'iso-8859-1'}.
\end{classdesc}

\begin{classdesc}{XMLFilterBase}{base}
  This class is designed to sit between an \class{XMLReader} and the
  client application's event handlers.  By default, it does nothing
  but pass requests up to the reader and events on to the handlers
  unmodified, but subclasses can override specific methods to modify
  the event stream or the configuration requests as they pass through.
\end{classdesc}

\begin{funcdesc}{prepare_input_source}{source\optional{, base}}
  This function takes an input source and an optional base URL and
  returns a fully resolved \class{InputSource} object ready for
  reading.  The input source can be given as a string, a file-like
  object, or an \class{InputSource} object; parsers will use this
  function to implement the polymorphic \var{source} argument to their
  \method{parse()} method.
\end{funcdesc}
