\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}{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}
