Difference between revisions of "XSLT Module"

From BaseX Documentation
Jump to navigation Jump to search
(→‎Examples: Second example added.)
Line 40: Line 40:
  
 
'''Example 1: Basic XSL transformation with dummy document and without parameters'''
 
'''Example 1: Basic XSL transformation with dummy document and without parameters'''
 +
 +
'''basic.xslt'''
 +
<pre class="brush:xquery">
 +
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
 +
  <xsl:template match="/">
 +
    <result/>
 +
  </xsl:template>
 +
</xsl:stylesheet>
 +
</pre>
  
 
'''Query:'''
 
'''Query:'''
 
<pre class="brush:xquery">
 
<pre class="brush:xquery">
let $input := <dummy/>
+
xslt:transform(<dummy/>, 'basic.xslt')
let $xslt := <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
 
              <xsl:template match="/">
 
                <result/>
 
              </xsl:template>
 
            </xsl:stylesheet>
 
return xslt:transform($input, $xslt)
 
 
</pre>
 
</pre>
 
'''Result:'''
 
'''Result:'''
 
<pre class="brush:xml"><result/></pre>
 
<pre class="brush:xml"><result/></pre>
  
'''Example 2: Basic XSL transformation with dummy document and without parameters'''
+
'''Example 2: XSLT transformation of an input document.'''
  
 
'''Query:'''
 
'''Query:'''

Revision as of 14:18, 10 July 2011

This module contains XQuery functions and variables to perform XSLT transformations. All functions are preceded by the xslt: prefix, which is linked to the http://www.basex.org/xslt namespace. By default, this module relies on the internal XSLT 1.0 implementation of Java. If Saxon is found in the classpath, however, XSLT 2.0 is used.

Note that this module has been introduced with Version 6.7.1 of BaseX.

$xslt:processor

Signatures $xslt:processor as xs:string
Summary This variable returns the name of the applied XSLT processor (currently: Java or Saxon).

$xslt:version

Signatures $xslt:version as xs:string
Summary This variable returns the supported XSLT version (currently: 1.0 or 2.0).

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 may be
  • an xs:string, containing the path to the document,
  • an xs:string, containing the document itself, or
  • a node() containing the actual document.

If Saxon is found in the Java classpath, XSLT 2.0 is used. Otherwise, Java’s internal XSLT 1.0 is used to perform the transformation.

Examples

Example 1: Basic XSL transformation with dummy document and without parameters

basic.xslt

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
  <xsl:template match="/">
    <result/>
  </xsl:template>
</xsl:stylesheet>

Query:

xslt:transform(<dummy/>, 'basic.xslt')

Result:

<result/>

Example 2: XSLT transformation of an input document.

Query:

declare option db:chop "off";

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>