Difference between revisions of "XSLT Module"
m (Text replace - "with Version 9.0}}:" to "with Version 9.0:}}") |
|||
Line 40: | Line 40: | ||
==xslt:transform== | ==xslt:transform== | ||
+ | |||
+ | {{Updated with Version 9.0:}} {{Code|$options}} argument added. | ||
{| width='100%' | {| width='100%' | ||
|- | |- | ||
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
− | |{{Func|xslt:transform|$input as item(), $stylesheet as item()|node()}}<br />{{Func|xslt:transform|$input as item(), $stylesheet as item(), $params as map( | + | |{{Func|xslt:transform|$input as item(), $stylesheet as item()|node()}}<br />{{Func|xslt:transform|$input as item(), $stylesheet as item(), $params as map(*)|node()}}<br />{{Func|xslt:transform|$input as item(), $stylesheet as item(), $params as map(*), $options as map(*)|node()}} |
|- | |- | ||
| '''Summary''' | | '''Summary''' | ||
Line 51: | Line 53: | ||
* {{Code|xs:string}}, containing the document in its string representation, or | * {{Code|xs:string}}, containing the document in its string representation, or | ||
* {{Code|node()}}, containing the document itself. | * {{Code|node()}}, containing the document itself. | ||
− | The {{Code|$params}} argument can be used to bind variables to a stylesheet. Only strings are supported when using Saxon (XSLT 2.0). | + | The {{Code|$params}} argument can be used to bind variables to a stylesheet. Only strings are supported when using Saxon (XSLT 2.0). The following {{Code|$options}} are available: |
+ | * {{Code|cache}}: cache XSLT transformer (speeds up repeated transformations, but may increase memory consumption) | ||
|- | |- | ||
| '''Error''' | | '''Error''' | ||
Line 58: | Line 61: | ||
==xslt:transform-text== | ==xslt:transform-text== | ||
+ | |||
+ | {{Updated with Version 9.0:}} {{Code|$options}} argument added. | ||
{| width='100%' | {| width='100%' | ||
|- | |- | ||
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
− | |{{Func|xslt:transform-text|$input as item(), $stylesheet as item()|xs:string}}<br />{{Func|xslt:transform-text|$input as item(), $stylesheet as item(), $params as map(xs:string, | + | |{{Func|xslt:transform-text|$input as item(), $stylesheet as item()|xs:string}}<br />{{Func|xslt:transform-text|$input as item(), $stylesheet as item(), $params as map(*)|xs:string}}<br />{{Func|xslt:transform-text|$input as item(), $stylesheet as item(), $params as map(*), $options as map(*)|xs:string}} |
|- | |- | ||
| '''Summary''' | | '''Summary''' | ||
− | |Transforms the document specified by {{Code|$input}}, using the XSLT template specified by {{Code|$stylesheet}}, and returns the result as string. The semantics of {{Code|$params}} is the same as for [[#xslt:transform|xslt:transform]].<br /> | + | |Transforms the document specified by {{Code|$input}}, using the XSLT template specified by {{Code|$stylesheet}}, and returns the result as string. The semantics of {{Code|$params}} and {{Code|$options}} is the same as for [[#xslt:transform|xslt:transform]].<br /> |
|- | |- | ||
| '''Error''' | | '''Error''' | ||
Line 183: | Line 188: | ||
;Version 9.0 | ;Version 9.0 | ||
+ | * Updated: [[#xslt:transform|xslt:transform]], [[#xslt:transform-text|xslt:transform-text]]: {{Code|$options}} argument added. | ||
* Updated: error codes updated; errors now use the module namespace | * Updated: error codes updated; errors now use the module namespace | ||
Revision as of 18:25, 23 November 2017
This XQuery Module contains functions and variables to perform XSLT transformations. 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();
Contents
Conventions
All functions and errors in this module are assigned to the http://basex.org/modules/xslt
namespace, which is statically bound to the xslt
prefix.
Functions
xslt:processor
Signatures | xslt:processor() as xs:string |
Summary | Returns 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 | Returns the supported XSLT version (currently: "1.0" or "2.0"). "Unknown" is returned if a custom implementation was chosen. |
xslt:transform
Template:Updated with Version 9.0: $options
argument added.
Signatures | xslt:transform($input as item(), $stylesheet as item()) as node() xslt:transform($input as item(), $stylesheet as item(), $params as map(*)) as node() xslt:transform($input as item(), $stylesheet as item(), $params as map(*), $options as map(*)) as node()
|
Summary | Transforms the document specified by $input , using the XSLT template specified by $stylesheet , and returns the result as node. $input and $stylesheet can be specified as
The
|
Error | error : an error occurred during the transformation process.
|
xslt:transform-text
Template:Updated with Version 9.0: $options
argument added.
Signatures | xslt:transform-text($input as item(), $stylesheet as item()) as xs:string xslt:transform-text($input as item(), $stylesheet as item(), $params as map(*)) as xs:string xslt:transform-text($input as item(), $stylesheet as item(), $params as map(*), $options as map(*)) as xs:string
|
Summary | Transforms the document specified by $input , using the XSLT template specified by $stylesheet , and returns the result as string. The semantics of $params and $options is the same as for xslt:transform. |
Error | error : an error occurred during the transformation process.
|
Examples
Example 1: Basic XSL transformation with dummy document and without parameters
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 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, map { "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> <v>1</v>
Errors
Code | Description |
---|---|
error
|
An error occurred during the transformation process. |
Changelog
- Version 9.0
- Updated: xslt:transform, xslt:transform-text:
$options
argument added. - Updated: error codes updated; errors now use the module namespace
- Version 7.6
- Added: xslt:transform-text
- Updated: xslt:transform returned error code
- Version 7.3
- Updated: $xslt:processor → xslt:processor, $xslt:version → xslt:version