<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.w3c.dom.Attr</code></td><td width="" align="left"><code><a href="#method_getCurrentAttrNode">getCurrentAttrNode</a>(org.w3c.dom.Node node
         ,
      int offset)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Returns an Attr node for the current Node if one exits at the specified offset.</td></tr><tr valign="top"><td width="20%" align="right"><code>public static org.w3c.dom.Node</code></td><td width="" align="left"><code><a href="#method_getCurrentNode">getCurrentNode</a>(IDocument document
         ,
      int offset)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Returns the current Node at the specified offset.</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>(org.w3c.dom.Node node)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Takes a given <code>Node</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_getCurrentAttrNode">getCurrentAttrNode</a></h2><p><code>public org.w3c.dom.Attr <strong>getCurrentAttrNode</strong>(org.w3c.dom.Node node
         ,
      int offset)</code></p><p>Returns an Attr node for the current Node if one exits at the specified offset.</p><h3>Parameters</h3><p><code>node</code></p><p><code>offset</code></p><h3>Returns</h3><p><code>org.w3c.dom.Attr</code> - A w3c.dom.Attr</p><hr><h2><a name="method_getCurrentNode">getCurrentNode</a></h2><p><code>public org.w3c.dom.Node <strong>getCurrentNode</strong>(IDocument document
         ,
      int offset)</code></p><p>Returns the current Node at the specified offset.</p><h3>Parameters</h3><p><code>document</code></p><p><code>offset</code></p><h3>Returns</h3><p><code>org.w3c.dom.Node</code> - an w3c.dom.Node</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>(org.w3c.dom.Node node)</code></p><p>Takes a given <code>Node</code> and returns whether it 
 is part of the the XSLT Namespace.</p><h3>Parameters</h3><p><code>node</code> - The Node 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>