Difference between revisions of "XSLT Module"
m (Text replace - "| valign='top' | " to "| ") |
|||
Line 17: | Line 17: | ||
|<code><b>$xslt:processor</b> as xs:string</code><br /> | |<code><b>$xslt:processor</b> as xs:string</code><br /> | ||
|- | |- | ||
− | + | | '''Summary''' | |
|This variable contains the name of the applied XSLT processor, or the path to a custom implementation (currently: "Java", "Saxon EE", "Saxon PE", or "Saxon HE").<br /> | |This variable contains the name of the applied XSLT processor, or the path to a custom implementation (currently: "Java", "Saxon EE", "Saxon PE", or "Saxon HE").<br /> | ||
|} | |} | ||
Line 27: | Line 27: | ||
|<code><b>$xslt:version</b> as xs:string</code><br /> | |<code><b>$xslt:version</b> as xs:string</code><br /> | ||
|- | |- | ||
− | + | | '''Summary''' | |
|This variable contains the supported XSLT version (currently: "1.0" or "2.0"). "Unknown" is returned if a custom implementation was chosen.<br /> | |This variable contains the supported XSLT version (currently: "1.0" or "2.0"). "Unknown" is returned if a custom implementation was chosen.<br /> | ||
|} | |} | ||
Line 37: | Line 37: | ||
|<code><b>xslt:transform</b>($input as item(), $stylesheet as item()) as node()</code><br /><code><b>xslt:transform</b>($input as item(), $stylesheet as item(), $params as item()) as node()</code> | |<code><b>xslt:transform</b>($input as item(), $stylesheet as item()) as node()</code><br /><code><b>xslt:transform</b>($input as item(), $stylesheet as item(), $params as item()) as node()</code> | ||
|- | |- | ||
− | + | | '''Summary''' | |
|Transforms the document specified by <code>$input</code>, using the XSLT template specified by <code>$stylesheet</code>, and returns the result as <code>node()</code> instance. <code>$input</code> and <code>$stylesheet</code> can be specified as<br /> | |Transforms the document specified by <code>$input</code>, using the XSLT template specified by <code>$stylesheet</code>, and returns the result as <code>node()</code> instance. <code>$input</code> and <code>$stylesheet</code> can be specified as<br /> | ||
* <code>xs:string</code>, containing the path to the document, | * <code>xs:string</code>, containing the path to the document, |
Revision as of 00:42, 26 May 2012
This XQuery Module contains functions and variables to perform XSLT transformations. All functions are preceded by the xslt:
prefix, which is linked to the statically declared http://basex.org/modules/xslt
namespace.
By default, this module uses Java’s XSLT 1.0 Xalan implementation to transform documents. XSLT 2.0 is used instead if Version 9.x of the Saxon XSLT Processor (saxon9he.jar
, saxon9pe.jar
, saxon9ee.jar
) is found in the classpath. A custom transformer can be specified by overwriting the system property javax.xml.transform.TransformerFactory
, as shown in the following Java example:
System.setProperty("javax.xml.transform.TransformerFactory", "org.custom.xslt.TransformerFactoryImpl"); Context ctx = new Context(); String result = new XQuery("xslt:transform('...', '...')").execute(ctx); ... ctx.close();
$xslt:processor
Signatures | $xslt:processor as xs:string |
Summary | This variable contains the name of the applied XSLT processor, or the path to a custom implementation (currently: "Java", "Saxon EE", "Saxon PE", or "Saxon HE"). |
$xslt:version
Signatures | $xslt:version as xs:string |
Summary | This variable contains the supported XSLT version (currently: "1.0" or "2.0"). "Unknown" is returned if a custom implementation was chosen. |
xslt:transform
Signatures | xslt:transform($input as item(), $stylesheet as item()) as node() xslt:transform($input as item(), $stylesheet as item(), $params as item()) as node()
|
Summary | Transforms the document specified by $input , using the XSLT template specified by $stylesheet , and returns the result as node() instance. $input and $stylesheet can be specified as
The
|
Examples
Example 1: Basic XSL transformation with dummy document and without parameters
Query:
xslt:transform(<dummy/>, 'basic.xslt')
basic.xslt
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:template match="/"> <result/> </xsl:template> </xsl:stylesheet>
Result:
<result/>
Example 2: XSLT transformation of an input document
Query:
(: Outputs the result as html. :) declare option output:method 'html'; (: Turn whitespace chopping off. :) declare option db:chop 'no'; let $in := <books> <book> <title>XSLT Programmer´s Reference</title> <author>Michael H. Kay</author> </book> <book> <title>XSLT</title> <author>Doug Tidwell</author> <author>Simon St. Laurent</author> <author>Robert Romano</author> </book> </books> let $style := <xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:output method='xml'/> <xsl:template match="/"> <html> <body> <div> <xsl:for-each select='books/book'> • <b><xsl:apply-templates select='title'/></b>: <xsl:value-of select='author'/><br/> </xsl:for-each> </div> </body> </html> </xsl:template> </xsl:stylesheet> return xslt:transform($in, $style)
Result:
<html> <body> <div> • <b>XSLT Programmer´s Reference</b>: Michael H. Kay<br> • <b>XSLT</b>: Doug Tidwell<br> </div> </body> </html>
Example 3: Assigning a variable to an XSLT stylesheet
Query:
let $in := <dummy/> let $style := doc('variable.xsl') return ( xslt:transform($in, $style, <xslt:parameters><xslt:v>1</xslt:v></xslt:parameters>), xslt:transform($in, $style, map { "v" := 1 }) )
variable.xslt
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:param name='v'/> <xsl:template match='/'> <v><xsl:value-of select='$v'/></v> </xsl:template> </xsl:stylesheet>
Result:
<v>1</v> <v>1</v>