\name{XMLInternalDocument-class}
\docType{class}
\alias{XMLAbstractDocument-class} %XXX put somewhere else.
\alias{XMLInternalDocument-class}
\alias{HTMLInternalDocument-class}
\alias{coerce,XMLInternalNode,XMLInternalDocument-method}
\alias{coerce,XMLInternalDocument,XMLInternalNode-method}
\alias{coerce,XMLDocument,XMLInternalDocument-method}

\title{Class to represent reference to C-level data structure for an XML
  document}
\description{
  This class is used to provide a handle/reference to a C-level
  data structure that contains the information from parsing 
  parsing XML content.
  This leaves the nodes in the DOM or tree as C-level nodes
  rather than converting them to explicit R \code{XMLNode}
  objects.  One can then operate on this tree in much the same
  way as one can the \code{XMLNode} representations,
  but we a) avoid copying the nodes to R, and b) can navigate
  the tree both down and up using \code{\link{xmlParent}}
  giving greater flexibility.
  Most importantly, one can use an \code{XMLInternalDocument}
  class object with an XPath expression to easily and relatively efficiently
  find nodes within a document that satisfy some criterion.
  See \code{\link{getNodeSet}}.
}
\section{Objects from the Class}{
  Objects of this type are created via
  \code{\link{xmlTreeParse}}
  and   \code{\link{htmlTreeParse}}
  with the argument  \code{useInternalNodes} given as \code{TRUE}.
}
\section{Extends}{
Class \code{\linkS4class{oldClass}}, directly.
}
\section{Methods}{
  There are methods to serialize (dump) a document to a file or as a
  string, and to coerce it to a node by finding the top-level node of
  the document.
  There are functions to search the document for nodes specified by
  an XPath expression.
}
\references{
 XPath  \url{https://www.w3.org/TR/xpath/}
}
\seealso{

  \code{\link{xmlTreeParse}}
  \code{\link{htmlTreeParse}}
  \code{\link{getNodeSet}}  
}
\examples{

 f = system.file("exampleData", "mtcars.xml", package="XML")
 doc = xmlParse(f)
 getNodeSet(doc, "//variables[@count]")
 getNodeSet(doc, "//record")

 getNodeSet(doc, "//record[@id='Mazda RX4']")

 # free(doc)
}
\keyword{classes}
