\section{\module{xml.dom.minidom} ---
         Lightweight DOM implementation}

\declaremodule{standard}{xml.dom.minidom}
\modulesynopsis{Lightweight Document Object Model (DOM) implementation.}
\moduleauthor{Paul Prescod}{paul@prescod.net}
\sectionauthor{Paul Prescod}{paul@prescod.net}
\sectionauthor{Martin v. L\"owis}{martin@v.loewis.de}

\versionadded{2.0}

\module{xml.dom.minidom} is a light-weight implementation of the
Document Object Model interface.  It is intended to be
simpler than the full DOM and also significantly smaller.

DOM applications typically start by parsing some XML into a DOM.  With
\module{xml.dom.minidom}, this is done through the parse functions:

\begin{verbatim}
from xml.dom.minidom import parse, parseString

dom1 = parse('c:\\temp\\mydata.xml') # parse an XML file by name

datasource = open('c:\\temp\\mydata.xml')
dom2 = parse(datasource)   # parse an open file

dom3 = parseString('<myxml>Some data<empty/> some more data</myxml>')
\end{verbatim}

The \function{parse()} function can take either a filename or an open
file object.

\begin{funcdesc}{parse}{filename_or_file{, parser}}
  Return a \class{Document} from the given input. \var{filename_or_file}
  may be either a file name, or a file-like object. \var{parser}, if
  given, must be a SAX2 parser object. This function will change the
  document handler of the parser and activate namespace support; other
  parser configuration (like setting an entity resolver) must have been
  done in advance.
\end{funcdesc}

If you have XML in a string, you can use the
\function{parseString()} function instead:

\begin{funcdesc}{parseString}{string\optional{, parser}}
  Return a \class{Document} that represents the \var{string}. This
  method creates a \class{StringIO} object for the string and passes
  that on to \function{parse}.
\end{funcdesc}

Both functions return a \class{Document} object representing the
content of the document.

What the \function{parse()} and \function{parseString()} functions do
is connect an XML parser with a ``DOM builder'' that can accept parse
events from any SAX parser and convert them into a DOM tree.  The name
of the functions are perhaps misleading, but are easy to grasp when
learning the interfaces.  The parsing of the document will be
completed before these functions return; it's simply that these
functions do not provide a parser implementation themselves.

You can also create a \class{Document} by calling a method on a ``DOM
Implementation'' object.  You can get this object either by calling
the \function{getDOMImplementation()} function in the
\refmodule{xml.dom} package or the \module{xml.dom.minidom} module.
Using the implementation from the \module{xml.dom.minidom} module will
always return a \class{Document} instance from the minidom
implementation, while the version from \refmodule{xml.dom} may provide
an alternate implementation (this is likely if you have the
\ulink{PyXML package}{http://pyxml.sourceforge.net/} installed).  Once
you have a \class{Document}, you can add child nodes to it to populate
the DOM:

\begin{verbatim}
from xml.dom.minidom import getDOMImplementation

impl = getDOMImplementation()

newdoc = impl.createDocument(None, "some_tag", None)
top_element = newdoc.documentElement
text = newdoc.createTextNode('Some textual content.')
top_element.appendChild(text)
\end{verbatim}

Once you have a DOM document object, you can access the parts of your
XML document through its properties and methods.  These properties are
defined in the DOM specification.  The main property of the document
object is the \member{documentElement} property.  It gives you the
main element in the XML document: the one that holds all others.  Here
is an example program:

\begin{verbatim}
dom3 = parseString("<myxml>Some data</myxml>")
assert dom3.documentElement.tagName == "myxml"
\end{verbatim}

When you are finished with a DOM, you should clean it up.  This is
necessary because some versions of Python do not support garbage
collection of objects that refer to each other in a cycle.  Until this
restriction is removed from all versions of Python, it is safest to
write your code as if cycles would not be cleaned up.

The way to clean up a DOM is to call its \method{unlink()} method:

\begin{verbatim}
dom1.unlink()
dom2.unlink()
dom3.unlink()
\end{verbatim}

\method{unlink()} is a \module{xml.dom.minidom}-specific extension to
the DOM API.  After calling \method{unlink()} on a node, the node and
its descendants are essentially useless.

\begin{seealso}
  \seetitle[http://www.w3.org/TR/REC-DOM-Level-1/]{Document Object
            Model (DOM) Level 1 Specification}
           {The W3C recommendation for the
            DOM supported by \module{xml.dom.minidom}.}
\end{seealso}


\subsection{DOM Objects \label{dom-objects}}

The definition of the DOM API for Python is given as part of the
\refmodule{xml.dom} module documentation.  This section lists the
differences between the API and \refmodule{xml.dom.minidom}.


\begin{methoddesc}[Node]{unlink}{}
Break internal references within the DOM so that it will be garbage
collected on versions of Python without cyclic GC.  Even when cyclic
GC is available, using this can make large amounts of memory available
sooner, so calling this on DOM objects as soon as they are no longer
needed is good practice.  This only needs to be called on the
\class{Document} object, but may be called on child nodes to discard
children of that node.
\end{methoddesc}

\begin{methoddesc}[Node]{writexml}{writer\optional{,indent=""\optional{,addindent=""\optional{,newl=""}}}}
Write XML to the writer object.  The writer should have a
\method{write()} method which matches that of the file object
interface.  The \var{indent} parameter is the indentation of the current
node.  The \var{addindent} parameter is the incremental indentation to use
for subnodes of the current one.  The \var{newl} parameter specifies the
string to use to terminate newlines.

\versionchanged[The optional keyword parameters
\var{indent}, \var{addindent}, and \var{newl} were added to support pretty
output]{2.1}

\versionchanged[For the \class{Document} node, an additional keyword
argument \var{encoding} can be used to specify the encoding field of the XML
header]{2.3}
\end{methoddesc}

\begin{methoddesc}[Node]{toxml}{\optional{encoding}}
Return the XML that the DOM represents as a string.

With no argument, the XML header does not specify an encoding, and the
result is Unicode string if the default encoding cannot represent all
characters in the document. Encoding this string in an encoding other
than UTF-8 is likely incorrect, since UTF-8 is the default encoding of
XML.

With an explicit \var{encoding} argument, the result is a byte string
in the specified encoding. It is recommended that this argument is
always specified. To avoid UnicodeError exceptions in case of
unrepresentable text data, the encoding argument should be specified
as "utf-8".

\versionchanged[the \var{encoding} argument was introduced]{2.3}
\end{methoddesc}

\begin{methoddesc}[Node]{toprettyxml}{\optional{indent\optional{, newl}}}
Return a pretty-printed version of the document. \var{indent} specifies
the indentation string and defaults to a tabulator; \var{newl} specifies
the string emitted at the end of each line and defaults to \code{\e n}.

\versionadded{2.1}
\versionchanged[the encoding argument; see \method{toxml()}]{2.3}
\end{methoddesc}

The following standard DOM methods have special considerations with
\refmodule{xml.dom.minidom}:

\begin{methoddesc}[Node]{cloneNode}{deep}
Although this method was present in the version of
\refmodule{xml.dom.minidom} packaged with Python 2.0, it was seriously
broken.  This has been corrected for subsequent releases.
\end{methoddesc}


\subsection{DOM Example \label{dom-example}}

This example program is a fairly realistic example of a simple
program. In this particular case, we do not take much advantage
of the flexibility of the DOM.

\verbatiminput{minidom-example.py}


\subsection{minidom and the DOM standard \label{minidom-and-dom}}

The \refmodule{xml.dom.minidom} module is essentially a DOM
1.0-compatible DOM with some DOM 2 features (primarily namespace
features).

Usage of the DOM interface in Python is straight-forward.  The
following mapping rules apply:

\begin{itemize}
\item Interfaces are accessed through instance objects. Applications
      should not instantiate the classes themselves; they should use
      the creator functions available on the \class{Document} object.
      Derived interfaces support all operations (and attributes) from
      the base interfaces, plus any new operations.

\item Operations are used as methods. Since the DOM uses only
      \keyword{in} parameters, the arguments are passed in normal
      order (from left to right).   There are no optional
      arguments. \keyword{void} operations return \code{None}.

\item IDL attributes map to instance attributes. For compatibility
      with the OMG IDL language mapping for Python, an attribute
      \code{foo} can also be accessed through accessor methods
      \method{_get_foo()} and \method{_set_foo()}.  \keyword{readonly}
      attributes must not be changed; this is not enforced at
      runtime.

\item The types \code{short int}, \code{unsigned int}, \code{unsigned
      long long}, and \code{boolean} all map to Python integer
      objects.

\item The type \code{DOMString} maps to Python strings.
      \refmodule{xml.dom.minidom} supports either byte or Unicode
      strings, but will normally produce Unicode strings.  Values
      of type \code{DOMString} may also be \code{None} where allowed
      to have the IDL \code{null} value by the DOM specification from
      the W3C.

\item \keyword{const} declarations map to variables in their
      respective scope
      (e.g. \code{xml.dom.minidom.Node.PROCESSING_INSTRUCTION_NODE});
      they must not be changed.

\item \code{DOMException} is currently not supported in
      \refmodule{xml.dom.minidom}.  Instead,
      \refmodule{xml.dom.minidom} uses standard Python exceptions such
      as \exception{TypeError} and \exception{AttributeError}.

\item \class{NodeList} objects are implemented using Python's built-in
      list type.  Starting with Python 2.2, these objects provide the
      interface defined in the DOM specification, but with earlier
      versions of Python they do not support the official API.  They
      are, however, much more ``Pythonic'' than the interface defined
      in the W3C recommendations.
\end{itemize}


The following interfaces have no implementation in
\refmodule{xml.dom.minidom}:

\begin{itemize}
\item \class{DOMTimeStamp}

\item \class{DocumentType} (added in Python 2.1)

\item \class{DOMImplementation} (added in Python 2.1)

\item \class{CharacterData}

\item \class{CDATASection}

\item \class{Notation}

\item \class{Entity}

\item \class{EntityReference}

\item \class{DocumentFragment}
\end{itemize}

Most of these reflect information in the XML document that is not of
general utility to most DOM users.
