XSLT Functions
This module contains functions and variables to perform XSL transformations. The standard function fn:transform uses the same processors.
By default, this module uses Java’s XSLT 1.0 Xalan implementation to transform documents. XSLT 3.0 is used if Saxon is found in the classpath. A specific transformer can be specified by assigning a classpath to the system property javax.xml.transform.TransformerFactory with the -D flag on the command line, or directly in Java:
System.setProperty(
"javax.xml.transform.TransformerFactory",
"org.custom.xslt.TransformerFactoryImpl");
Context ctx = new Context();
String result = new XQuery("xslt:transform('...', '...')").execute(ctx);
...
ctx.close();
The functions of this module are always invoked via the JAXP interface. If Saxon is available,
fn:transform addresses it via its s9api interface instead, which gives access to all entry points, options and delivery formats of the specification.
Currently,
xslt:transform-report requires Saxon 10 or later to return results.
All functions and errors are in the http://basex.org/modules/xslt namespace, to which the xslt prefix is statically bound.
| Signature | xslt:processor() as xs:string |
|---|
| Summary | Returns the name of the applied XSLT processor (Java, Saxon EE, Saxon PE, Saxon HE). If a system property was assigned that points to an existing implementation other than Saxon, the classpath is returned instead. |
|---|
| Signature | xslt:version() as xs:string |
|---|
| Summary | Returns the supported XSLT version (1.0, 3.0). An empty string is returned if a classpath in the system property points to an existing implementation other than Saxon. |
|---|
| Signature | xslt:transform( $input as item(), $stylesheet as item(), $arguments as map(*)? := {}, $options as map(*)? := {}) as document-node()create |
|---|
| Summary | Transforms the document specified by $input, using the XSLT template specified by $stylesheet, and returns the result as a document node. $input and $stylesheet can be specified as:
xs:string, containing the stylesheet URI,xs:string, containing the document in its string representation, orxnode(), containing the document itself.
XML Catalog files will be considered when resolving URIs. Variables can be bound to a stylesheet via $arguments (only strings are supported when using XSLT 3.0 and Saxon). The following $options are available:
| option | default | description |
|---|
cache | false() |
Cache XSLT transformer; speeds up repeated transformations, but increases memory consumption.
|
|
|---|
| Errors | error | An error occurred during the transformation process. |
|
|---|
| Signature | xslt:transform-text( $input as item(), $stylesheet as item(), $arguments as map(*)? := {}, $options as map(*)? := {}) as xs:stringcreate |
|---|
| Summary | Transforms the document specified by $input, using the XSLT template specified by $stylesheet, and returns the result as string. The semantics of $arguments and $options is the same as for xslt:transform. |
|---|
| Errors | error | An error occurred during the transformation process. |
|
|---|
| Signature | xslt:transform-report( $input as item(), $stylesheet as item(), $arguments as map(*)? := {}, $options as map(*)? := {}) as map(*)create |
|---|
| Summary | Transforms the document specified by $input, using the XSLT template specified by $stylesheet, and returns a map with the following keys:
result: The transformation result: one or more nodes, or (if the result cannot be converted to XML) an item of type xs:untypedAtomic.messages: Requires Saxon 10 or later: Informational output generated by xsl:message elements: A sequence of arrays. The arrays consist of XML elements, or (for those messages that cannot be converted to XML) items of type xs:untypedAtomic.error (optional): An error string, which would be raised as an error by the other functions of this module.
The semantics of $arguments and $options is the same as for xslt:transform.
|
|---|
| Signature | xslt:init() as empty-sequence()create |
|---|
| Summary | Discards the cached XSLT transformers. |
|---|
Example 1: XSL transformation, with XML and XSL supplied as nodes
Query:
(: Outputs the result as html. :)
declare option output:method 'html';
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='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='xml'/>
<xsl:template match="/">
<html>
<body>
<xsl:for-each select='books/book'>
• <b><xsl:apply-templates select='title'/></b>: <xsl:value-of select='author'/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
return xslt:transform($in, $style)
Result:
<!DOCTYPE HTML><html><body>
• <b>XSLT Programmer’s Reference</b>: Michael H. Kay
• <b>XSLT</b>: Doug Tidwell</body></html>
Example 2: Textual XSL transformation
Query:
xslt:transform-text(<dummy/>, 'basic.xslt')
basic.xslt
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="/">123</xsl:template>
</xsl:stylesheet>
Result:
123
Example 3: XSL transformation with variable assignment
Query:
let $in := <dummy/>
let $style := doc('variable.xsl')
return xslt:transform($in, $style, { "v": 1 })
variable.xsl
<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>
Example 4: XSL transformation, yielding a result and info messages
Query:
xslt:transform-report(
<_/>,
<xsl:transform version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<xsl:message><msg>START...</msg></xsl:message>
<xml>123</xml>
<xsl:message select='4, 5, "...END"'/>
</xsl:template>
</xsl:transform>
)
Result:
{
"messages": ([<msg>START...</msg>], ["4 5 ...END"]),
"result": <xml>123</xml>
}
| Code | Description |
|---|
error | An error occurred during the transformation process. |
Version 11.0- Added:
xslt:init to discard cached XSLT transformers.
Version 9.7Version 9.2- Updated: Support for XML Catalog files added.
Version 9.0Version 7.6Version 7.3
⚡Generated with XQuery