Skip to content

XSLT

Purpose

Saxon-HE processor with stylesheet caching.

The open-source implementation of XSLT 3.0, XPath 2.0 and 3.1, and XQuery 3.1. This provides the “basic” conformance level of these languages; it also supports some optional features of the specifications such as serialization and support for XQuery modules.

Methods

Binding name: p6.xslt


process

Process the given xml with the supplied xslt and applying the supplied parameters, storing the compiled xslt in the cache with the supplied id.

Syntax

String p6.xslt.process(String id, String xslt, String xml, Map<String, Object> parameters = null)

Results of the transformation are returned as a String.

Parameter: parameters

Allowed parameter types are:

  • Boolean
  • Integer
  • Long
  • Short
  • Character
  • Byte
  • String
  • Double
  • Float
  • BigDecimal
  • BigInteger
  • URI

Note

Subsequent calls to process() will search for and use the cached instance of the compiled XSLT giving much greater performance. The cache will expire entries after 10 minutes of inactivity.

Warning

The parameter id is used to cache the compiled xslt.

To improve performance and avoid compiling multiple times the same xslt please reuse the id when possible.

The cache is global to the instance and not split by app key.

Examples

Without params

def results = p6.xslt.process("myTransform", p6.resource.get('STYLESHEET'), p6.resource.get('XMLIN'))
println results

Resource: STYLESHEET
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/hello-world">
        <HTML>
            <HEAD><TITLE/></HEAD>
            <BODY>
                <H1><xsl:value-of select="greeting"/></H1>
                <xsl:apply-templates select="greeter"/>
            </BODY>
        </HTML>
    </xsl:template>
    <xsl:template match="greeter">
        <DIV>from <I><xsl:value-of select="."/></I></DIV>
    </xsl:template>
</xsl:stylesheet>
Resource: XMLIN
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="hello.xsl"?>
<hello-world>
    <greeter>An XSLT Programmer</greeter>
    <greeting>Hello, World!</greeting>
</hello-world>

With params

def params = [
    "PARAM_INTEGER": 42,
    "PARAM_STRING": "Amalto",
    "PARAM_BOOLEAN": true
    ]

def results = p6.xslt.process("myTransform", p6.resource.get('STYLESHEET'), p6.resource.get('XMLIN'))
println results

Resource: STYLESHEET
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:param name="PARAM_INTEGER"/>
    <xsl:param name="PARAM_STRING"/>
    <xsl:param name="PARAM_BOOLEAN"/>

    <xsl:template match="/hello-world">
        <HTML>
            <HEAD><TITLE/></HEAD>
            <BODY>
                <H1><xsl:value-of select="greeting"/></H1>
                <xsl:apply-templates select="greeter"/>
                <ul>
                    <li>Int: <xsl:value-of select="$PARAM_INTEGER"/></li>
                    <li>String: <xsl:value-of select="$PARAM_STRING"/></li>
                    <li>Boolean: <xsl:value-of select="$PARAM_BOOLEAN"/></li>
                </ul>
            </BODY>
        </HTML>
    </xsl:template>
    <xsl:template match="greeter">
        <DIV>from <I><xsl:value-of select="."/></I></DIV>
    </xsl:template>
</xsl:stylesheet>
Resource: STYLESHEET
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="hello.xsl"?>
<hello-world>
    <greeter>An XSLT Programmer</greeter>
    <greeting>Hello, World!</greeting>
</hello-world>