XSLT Module
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:
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 :=
<html xsl:version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns='http://www.w3.org/1999/xhtml'>
<body>
<h1>Books</h1>
<ul>
<xsl:for-each select='books/book'>
<li>
<b><xsl:apply-templates select='title'/></b>: <xsl:value-of select='string-join(author, ", ")'/>
</li>
</xsl:for-each>
</ul>
</body>
</html>
return xslt:transform($in, $style)
Result:
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1>Books</h1>
<ul>
<li><b>XSLT Programmer´s Reference</b>: Michael H. Kay</li>
<li><b>XSLT</b>: Doug Tidwell, Simon St. Laurent, Robert Romano</li>
</ul>
</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>