<HTML><HEAD></HEAD><BODY>
    <P>This compatibility API supports limited use of the Xalan-Java 1 API in the Xalan-Java 2 environment. For the Xalan-Java 2 API, see <A href="../apidocs/index.html" target="_top">Xalan-Java 2 API</A>.</P>
  
     <P><B>Basic procedure for performing transformations:</B></P>
    <OL>
      <LI>Use one of the {@link org.apache.xalan.xslt.XSLTProcessorFactory} static getProcessor methods to
      instantiate an {@link org.apache.xalan.xslt.XSLTProcessor}.<BR><BR>
       The XSLT and XPath engines are independent from any given DOM or XML implementation. All parser-dependent
       calls are funneled through the {@link org.apache.xalan.xpath.xml.XMLParserLiaison}.<BR><BR></LI>     
       <LI>Set up {@link org.apache.xalan.xslt.XSLTInputSource} objects for the XML input and XSL stylesheet. 
       You can use a file name or URL, character stream, byte stream, or SAX input stream to instantiate an
       XSLTInputSource object.<BR><BR>
       If the XML document contains a stylesheet Processing Instruction (PI), you do not need to create a separate
       XSLTInputSource object for an XSL stylesheet.<BR><BR>
       <B>Note:</B> For improved performance with a series of transformations, use the XSLTProcessor
       processStylesheet method to compile the XSL stylesheet. The result is a 
       {@link org.apache.xalan.xslt.StylesheetRoot} object with its own process() method for performing transformations.
        Compiling the stylesheet is also useful when you need to get information from the
       stylesheet before the transformation occurs. You also must compile the stylesheet if you are using the
        XSLTProcessor as a SAX document handler.<BR><BR></LI>
       <LI>Set up an {@link org.apache.xalan.xslt.XSLTResultTarget} for the transformation output. You can use a
       file name or URL, character stream, byte stream, or SAX document handler to instantiate an XSLTResultTarget
       object.<BR><BR></LI>
       <LI>Use the XSLTProcessor or (if you have compiled the stylesheet) the(@link org.apache.xalan.xslt.StylesheetRoot}
       process method to perform the transformation.<BR><BR>
        Xalan-Java is thread-safe for one instance per thread. If you are using the same instance of XSLTProcessor to
         perform more than one transformation, call the reset method between transformations.</LI>
    </OL>
  </BODY></HTML>