28

I have a xsl file where i need to use parameters from an external source. I am using Java and my code looks something like this:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer xsltTransformer = transformerFactory.newTransformer(xsltSource);
xsltTransformer.setParameter(parameterName, parameterValue);

However, an exception is thrown at the 2nd line - Variable or parameter 'variable_name' is undefined. I realize that XSL is compiled and is probably compiled when the transformer is created.

So, how do i pass parameters to my transformation? How is the setParameter method supposed to be used?

Anirudh
  • 2,209
  • 4
  • 25
  • 32
  • Double check to make sure you spelled the parameterName properly and that the cAsE matches what is declared in the XSLT. – Mads Hansen Nov 03 '09 at 14:51

2 Answers2

62

If you pass a parameter like:

transformer.setParameter("render_id", "1234");

the parameter can be picked up by the transform:

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

<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>

<!-- Receives the id of the menu being rendered. -->
<xsl:param name="render_id" />
rsp
  • 23,135
  • 6
  • 55
  • 69
  • 8
    Great Ans, FYI if the parameter has any value in the xsl it will be ignored and the one sent by Java will take precedence – Neil Jul 05 '12 at 09:32
2

rsp's answer was spot on. Thanks. Just want to add that you cannot pass a parameter to a variable in the same way (I am setting parameters via Java's TransformerFactory).

I made the mistake of thinking variables and params were interchangeable :)

TinyRacoon
  • 4,655
  • 2
  • 23
  • 22
  • 5
    Here's a good answer about differences between `param` and `variable`: http://stackoverflow.com/a/11854157/1813669 – Scadge Nov 11 '15 at 13:41