| SAXONICA | 
This section is relevant to the Java platform only.
Saxon allows various third-party object models to be used to supply the input to a transformation or query. Specifically, it supports DOM, JDOM, XOM, and DOM4J. For each of these models there is a support module in its own JAR file: saxon8-dom.jar, saxon8-jdom.jar, saxon8-xom.jar, or saxon8-dom4j.jar. The relevant object model is not recognized unless the appropriate support module is on the classpath.
For DOM input, the source can be supplied by wrapping a DOMSource around the DOM
            Document node. For JDOM, XOM, and DOM4J the approach is similar, except that the wrapper classes are supplied
            by Saxon itself: they are net.sf.saxon.jdom.DocumentWrapper,
            net.sf.saxon.xom.DocumentWrapper, and 
            net.sf.saxon.dom4j.DocumentWrapper, and 
            respectively. These wrapper classes implement
            the Saxon NodeInfo interface (which means that they also implement Source).
         
None of these models is likely to be as efficient as using Saxon's native tree model. For best performance, you should avoid using a DOM, JDOM, XOM, or DOM4J source. These models should only be used if your application needs to construct them for other reasons.
Saxon supports these models by wrapping each DOM, JDOM, XOM, or DOM4J node in a wrapper that implements
            the Saxon NodeInfo interface. When nodes are returned by the XQuery or XPath API, these
            wrappers are removed and the original node is returned. Similarly, the wrappers are generally removed when
            extension functions expecting a node are called.
         
In the case of DOM only, Saxon also supports a wrapping the other way around: an object implementing the DOM interface may be wrapped around a Saxon NodeInfo. This is done when Java methods expecting a DOM Node are called as extension functions, if the NodeInfo is not itself a wrapper for a DOM Node.
You can also send output to a DOM by using a DOMResult, or to a JDOM tree by
            using a JDOMResult. In such cases it is a good idea to set 
            saxon:require-well-formed="yes" on xsl:output to ensure that the
            transformation or query result is a well-formed document (for example, that it does not contain
            several elements at the top level).