param_1-input.xml
<?xml version="1.0"?>
<languages>
<english>bread</english>
<danish>brød</danish>
<french>pain</french>
</languages>
param_1-stylesheet.xsl
<?xml version="1.0"?>
<xsl:stylesheet
version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param
name="language" select="'en'"/>
<xsl:output
indent="yes"/>
<xsl:template
match="/">
<languages>
<xsl:choose>
<xsl:when
test="$language = 'fr'"><xsl:value-of
select="languages/frensh"/></xsl:when>
<xsl:when
test="$language = 'da'"><xsl:value-of
select="languages/danish"/></xsl:when>
<xsl:otherwise><xsl:copy-of
select="languages/english"/></xsl:otherwise>
</xsl:choose>
</languages>
</xsl:template>
</xsl:stylesheet>
param_1-output
<?xml version="1.0" encoding="UTF-8"?>
<languages>
<english>bread</english>
</languages>
When used at global level (child of xsl:stylesheet), xsl:param acts like an external variable picking up its value from outside. When the transformation takes place at the command line a parameter can be passed in. XML Editors has a dialog box where external parameters can be declared. When a programming language is host for the transformation, it has a "parameter" class that can be used to make a parameter object passing parameters into the transformation process.
See: http://www.xmlplease.com/transform-xml-xslt10 for example in .net.
Updated 2009-03-19