Difference between revisions of "XSLT Module"
m (Text replace - "www.basex.org" to "basex.org") |
m (Text replace - "XQuery functions " to "XQuery Modules ") |
||
Line 1: | Line 1: | ||
− | This module contains [[ | + | This module contains [[XQuery Modules]] and variables to perform XSLT transformations. All functions are preceded by the <code>xslt:</code> prefix, which is linked to the statically declared <code>http://basex.org/modules/xslt</code> 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 [http://www.saxonica.com/ Saxon XSLT Processor] (<code>saxon9he.jar</code>, <code>saxon9pe.jar</code>, <code>saxon9ee.jar</code>) is found in the classpath. A custom transformer can be specified by overwriting the system property <code>javax.xml.transform.TransformerFactory</code>, as shown in the following Java example: | 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 [http://www.saxonica.com/ Saxon XSLT Processor] (<code>saxon9he.jar</code>, <code>saxon9pe.jar</code>, <code>saxon9ee.jar</code>) is found in the classpath. A custom transformer can be specified by overwriting the system property <code>javax.xml.transform.TransformerFactory</code>, as shown in the following Java example: |
Revision as of 21:41, 31 March 2012
This module contains XQuery Modules 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>