Difference between revisions of "XSLT Module"
m (Text replacement - "<syntaxhighlight lang="xquery">" to "<pre lang='xquery'>") Tags: Mobile web edit Mobile edit |
m (Text replacement - "</syntaxhighlight>" to "</pre>") Tags: Mobile web edit Mobile edit |
||
Line 12: | Line 12: | ||
... | ... | ||
ctx.close(); | ctx.close(); | ||
− | </ | + | </pre> |
=Conventions= | =Conventions= | ||
Line 143: | Line 143: | ||
</xsl:stylesheet> | </xsl:stylesheet> | ||
− | return xslt:transform($in, $style)</ | + | return xslt:transform($in, $style)</pre> |
'''Result:''' | '''Result:''' | ||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
Line 154: | Line 154: | ||
</body> | </body> | ||
</html> | </html> | ||
− | </ | + | </pre> |
'''Example 2: Textual XSL transformation''' | '''Example 2: Textual XSL transformation''' | ||
Line 161: | Line 161: | ||
<pre lang='xquery'> | <pre lang='xquery'> | ||
xslt:transform-text(<dummy/>, 'basic.xslt') | xslt:transform-text(<dummy/>, 'basic.xslt') | ||
− | </ | + | </pre> |
'''basic.xslt''' | '''basic.xslt''' | ||
Line 168: | Line 168: | ||
<xsl:template match="/">123</xsl:template> | <xsl:template match="/">123</xsl:template> | ||
</xsl:stylesheet> | </xsl:stylesheet> | ||
− | </ | + | </pre> |
'''Result:''' | '''Result:''' | ||
− | <syntaxhighlight lang="xml">123</ | + | <syntaxhighlight lang="xml">123</pre> |
'''Example 3: XSL transformation with variable assignment''' | '''Example 3: XSL transformation with variable assignment''' | ||
Line 180: | Line 180: | ||
let $style := doc('variable.xsl') | let $style := doc('variable.xsl') | ||
return xslt:transform($in, $style, map { "v": 1 }) | return xslt:transform($in, $style, map { "v": 1 }) | ||
− | </ | + | </pre> |
'''variable.xsl''' | '''variable.xsl''' | ||
Line 191: | Line 191: | ||
</xsl:template> | </xsl:template> | ||
</xsl:stylesheet> | </xsl:stylesheet> | ||
− | </ | + | </pre> |
'''Result:''' | '''Result:''' | ||
Line 197: | Line 197: | ||
<v>1</v> | <v>1</v> | ||
<v>1</v> | <v>1</v> | ||
− | </ | + | </pre> |
'''Example 4: XSL transformation, yielding a result and info messages''' | '''Example 4: XSL transformation, yielding a result and info messages''' | ||
Line 213: | Line 213: | ||
</xsl:transform> | </xsl:transform> | ||
) | ) | ||
− | </ | + | </pre> |
'''Result:''' | '''Result:''' | ||
Line 221: | Line 221: | ||
"result": <xml>123</xml> | "result": <xml>123</xml> | ||
} | } | ||
− | </ | + | </pre> |
=Errors= | =Errors= |
Revision as of 18:36, 1 December 2023
This XQuery Module contains functions and variables to perform XSL transformations.
By default, this module uses Java’s XSLT 1.0 Xalan implementation to transform documents. XSLT 3.0 is used if the Saxon XSLT Processor is found in the class path (e.g. by placing the library files in the lib/custom
directory). 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:
<syntaxhighlight lang="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();
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
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. |
xslt:version
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. |
xslt:transform
Signature | xslt:transform( $input as item(), $stylesheet as item(), $arguments as map(*)? := map { }, $options as map(*)? := 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
XML Catalog files will be considered when resolving URIs. Variables can be bound to a stylesheet via
|
Error | error : an error occurred during the transformation process.
|
xslt:transform-text
Signature | xslt:transform-text( $input as item(), $stylesheet as item(), $arguments as map(*)? := map { }, $options as map(*)? := 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.
|
xslt:transform-report
Signature | xslt:transform-report( $input as item(), $stylesheet as item(), $arguments as map(*)? := map { }, $options as map(*)? := map { } ) as xs:string |
Summary | Transforms the document specified by $input , using the XSLT template specified by $stylesheet , and returns a map with the following keys:
The semantics of
|
Examples
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='3.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: <syntaxhighlight lang="xml"> <html>
<body>
• XSLT Programmer’s Reference: Michael H. Kay
• XSLT: Doug Tidwell
</body>
</html>
Example 2: Textual XSL transformation
Query:
xslt:transform-text(<dummy/>, 'basic.xslt')
basic.xslt <syntaxhighlight lang="xml"> <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="/">123</xsl:template>
</xsl:stylesheet>
Result:
<syntaxhighlight lang="xml">123
Example 3: XSL transformation with variable assignment
Query:
let $in := <dummy/>
let $style := doc('variable.xsl')
return xslt:transform($in, $style, map { "v": 1 })
variable.xsl <syntaxhighlight lang="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: <syntaxhighlight lang="xml"> <v>1</v> <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:
map {
"messages": ([<msg>START...</msg>], ["4 5 ...END"]),
"result": <xml>123</xml>
}
Errors
Code | Description |
---|---|
error
|
An error occurred during the transformation process. |
Changelog
- Version 9.7
- Added:
xslt:transform-report
- Version 9.2
- Updated: Support for XML Catalog files added.
- 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