Top-level xsl:param and 
    xsl:variable elements
    both define variables by
    binding a name to a value. This variable can be dereferenced
    elsewhere in the stylesheet using the form
    $.
    Once set, the value of an XSLT variable is fixed and cannot
    be changed. However if the variable is defined with a 
    top-level namexsl:param element instead of an
    xsl:variable element, then the default value
    can be changed before the transformation begins.
  
For example, the DocBook XSL stylesheets have a number of parameters that set various formatting options. I use these settings:
<xsl:param name="fop.extensions">1</xsl:param> <xsl:param name="page.width.portrait">7.375in</xsl:param> <xsl:param name="page.height.portrait">9.25in</xsl:param> <xsl:param name="page.margin.top">0.5in</xsl:param> <xsl:param name="page.margin.bottom">0.5in</xsl:param> <xsl:param name="region.before.extent">0.5in</xsl:param> <xsl:param name="body.margin.top">0.5in</xsl:param> <xsl:param name="page.margin.outer">1.0in</xsl:param> <xsl:param name="page.margin.inner">1.0in</xsl:param> <xsl:param name="body.font.family">Times</xsl:param> <xsl:param name="variablelist.as.blocks" select="1"/> <xsl:param name="generate.section.toc.level" select="1"/> <xsl:param name="generate.component.toc" select="0"/>
    The initial (and thus final) value of any parameter can be
    changed inside your Java code using these three methods of
    the
    Transformer class:
  
public abstract void setParameter(String name, Object value);public abstract Object getParameter(String name);public abstract void clearParameters();
    The setParameter() method provides a
    value for a parameter that overrides any value used in the
    stylesheet itself.  The processor is responsible for
    converting the Java object type passed to a reasonable XSLT
    equivalent. This should work well enough for
    String, 
    Integer, 
    Double, and
    Boolean as well as DOM types like 
        Node and
        NodeList. However, I
        wouldn’t rely on it for anything more complex like a
        File or a  
    Frame.
    
    The getParameter() method returns
    the value of a parameter previously set by Java. It will not
    return any value from the stylesheet itself, even if it has
    not been overridden by the Java code. Finally, the 
    clearParameters() method eliminates
    all Java mappings of parameters so that those variables are
    returned to whatever value is specified in the stylesheet.
  
    For example, in Java the above list of parameters for the
    DocBook stylesheets could be set with a JAXP Transformer
    object like this:
  
transformer.setParameter("fop.extensions", "1");
transformer.setParameter("page.width.portrait", "7.375in");
transformer.setParameter("page.height.portrait", "9.25in");
transformer.setParameter("page.margin.top", "0.5in");
transformer.setParameter("region.before.extent", "0.5in");
transformer.setParameter("body.margin.top", "0.5in");
transformer.setParameter("page.margin.bottom", "0.5in");
transformer.setParameter("page.margin.outer", "1.0in");
transformer.setParameter("page.margin.inner", "1.0in");
transformer.setParameter("body.font.family", "Times");
transformer.setParameter("variablelist.as.blocks", "1");
transformer.setParameter("generate.section.toc.level", "1");
transformer.setParameter("generate.component.toc", "0");
    Here I used strings for all the values. 
    However, in a few cases I could have used a
    Number of some kind instead.