<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xsl.core</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xsl.core</strong></font><br>
               Class XSLCore</h2><br><hr><pre>public class <strong>XSLCore</strong>
extends java.lang.Object</pre>The interface to all aspects of the XSL core functionality.
 <p>
 This is responsible for building and maintaining the cache of built XSL models.
 </p><p></p><hr><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Field Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>public static  java.lang.String</code></td><td width="80%" align="left"><code><a href="#field_XSL_CONTENT_TYPE">XSL_CONTENT_TYPE</a></code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               The XSL content type (= org.eclipse.wst.xml.core.xslsource)</td></tr><tr valign="top"><td width="20%" align="right"><code>public static  java.lang.String</code></td><td width="80%" align="left"><code><a href="#field_XSL_NAMESPACE_URI">XSL_NAMESPACE_URI</a></code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               The XSL namespace URI (= http://www.w3.org/1999/XSL/Transform)</td></tr></table><br><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Method Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>public StylesheetModel</code></td><td width="" align="left"><code><a href="#method_buildStylesheet">buildStylesheet</a>(IFile file)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Completely rebuild the source file from its DOM</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_clean">clean</a>(IProject project
         ,
      IProgressMonitor monitor)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Clean all of the stylesheets from the given project.</td></tr><tr valign="top"><td width="20%" align="right"><code>public static org.eclipse.wst.xsl.core.XSLCore</code></td><td width="" align="left"><code><a href="#method_getInstance">getInstance</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Get the singleton <code>XSLCore</code> instance.</td></tr><tr valign="top"><td width="20%" align="right"><code>public StylesheetModel</code></td><td width="" align="left"><code><a href="#method_getStylesheet">getStylesheet</a>(IFile file)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Get the cached stylesheet, or build it if it has not yet been built.</td></tr><tr valign="top"><td width="20%" align="right"><code>public static boolean</code></td><td width="" align="left"><code><a href="#method_isXMLFile">isXMLFile</a>(IFile file)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Determine whether the given file is an XML file by inspecting its content types.</td></tr><tr valign="top"><td width="20%" align="right"><code>public static boolean</code></td><td width="" align="left"><code><a href="#method_isXSLFile">isXSLFile</a>(IFile file)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Determine whether the given file is an XSL file by inspecting its content types.</td></tr><tr valign="top"><td width="20%" align="right"><code>public static boolean</code></td><td width="" align="left"><code><a href="#method_isXSLNamespace">isXSLNamespace</a>(IDOMNode node)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Takes a given <code>IDOMNode</code> and returns whether it 
 is part of the the XSLT Namespace.</td></tr><tr valign="top"><td width="20%" align="right"><code>public static IFile</code></td><td width="" align="left"><code><a href="#method_resolveFile">resolveFile</a>(IFile currentFile
         ,
      java.lang.String uri)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Locates a file for the given current file and URI.</td></tr></table><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Field Detail
               </h2></td></tr></table><h2><a name="field_XSL_CONTENT_TYPE">XSL_CONTENT_TYPE</a></h2><p><code>public static  java.lang.String <strong>XSL_CONTENT_TYPE</strong></code></p><table><tr><td>The XSL content type (= org.eclipse.wst.xml.core.xslsource)</td></tr></table><hr><h2><a name="field_XSL_NAMESPACE_URI">XSL_NAMESPACE_URI</a></h2><p><code>public static  java.lang.String <strong>XSL_NAMESPACE_URI</strong></code></p><table><tr><td>The XSL namespace URI (= http://www.w3.org/1999/XSL/Transform)</td></tr></table><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Methods Detail
               </h2></td></tr></table><h2><a name="method_buildStylesheet">buildStylesheet</a></h2><p><code>public StylesheetModel <strong>buildStylesheet</strong>(IFile file)</code></p><p>Completely rebuild the source file from its DOM</p><h3>Parameters</h3><p><code>file</code></p><h3>Returns</h3><p><code>StylesheetModel</code> - the stylesheet model, or null if it could not be created.</p><hr><h2><a name="method_clean">clean</a></h2><p><code>public void <strong>clean</strong>(IProject project
         ,
      IProgressMonitor monitor)</code></p><p>Clean all of the stylesheets from the given project.</p><h3>Parameters</h3><p><code>project</code> - the project to be cleaned</p><p><code>monitor</code> - a progress monitor to track the clean progress</p><hr><h2><a name="method_getInstance">getInstance</a></h2><p><code>public org.eclipse.wst.xsl.core.XSLCore <strong>getInstance</strong>()</code></p><p>Get the singleton <code>XSLCore</code> instance.</p><h3>Returns</h3><p><code>org.eclipse.wst.xsl.core.XSLCore</code> - the <code>XSLCore</code> instance</p><hr><h2><a name="method_getStylesheet">getStylesheet</a></h2><p><code>public StylesheetModel <strong>getStylesheet</strong>(IFile file)</code></p><p>Get the cached stylesheet, or build it if it has not yet been built.</p><h3>Parameters</h3><p><code>file</code></p><h3>Returns</h3><p><code>StylesheetModel</code> - source file, or null if could not be built</p><hr><h2><a name="method_isXMLFile">isXMLFile</a></h2><p><code>public boolean <strong>isXMLFile</strong>(IFile file)</code></p><p>Determine whether the given file is an XML file by inspecting its content types.</p><h3>Parameters</h3><p><code>file</code> - the file to inspect</p><h3>Returns</h3><p><code>boolean</code> - true if this file is an XML file</p><hr><h2><a name="method_isXSLFile">isXSLFile</a></h2><p><code>public boolean <strong>isXSLFile</strong>(IFile file)</code></p><p>Determine whether the given file is an XSL file by inspecting its content types.</p><h3>Parameters</h3><p><code>file</code> - the file to inspect</p><h3>Returns</h3><p><code>boolean</code> - true if this file is an XSL file</p><hr><h2><a name="method_isXSLNamespace">isXSLNamespace</a></h2><p><code>public boolean <strong>isXSLNamespace</strong>(IDOMNode node)</code></p><p>Takes a given <code>IDOMNode</code> and returns whether it 
 is part of the the XSLT Namespace.</p><h3>Parameters</h3><p><code>node</code> - The IDOMNode to be checked.</p><h3>Returns</h3><p><code>boolean</code> - True if part of the XSLT namespace, false otherwise.</p><hr><h2><a name="method_resolveFile">resolveFile</a></h2><p><code>public IFile <strong>resolveFile</strong>(IFile currentFile
         ,
      java.lang.String uri)</code></p><p>Locates a file for the given current file and URI.</p><h3>Parameters</h3><p><code>currentFile</code> - the file to resolve relative to</p><p><code>uri</code> - the relative URI</p><h3>Returns</h3><p><code>IFile</code> - the file at the URI relative to this <code>currentFile</code></p><hr></body></html>