Nathan Nadeau <ndn <at> gleim.com> writes: > A variable's scope in XSLT is only the containing block/element. > Therefore if you define a variable in an <xsl:if>, it is only in scope > with that <xsl:if> block, which is why it's telling you that $filename > is undefined when you try to reference it outside of the <xsl:if>. If > you need to compute a variable based on some conditions, you would put > the conditions within the <xsl:variable> definition block.
Good point. I ended up with something like this: <xsl:variable name="filename"> <xsl:choose> <xsl:when test="@NAME='CODE1'"> <xsl:value-of select="concat($outputDir,'/fr/int.xml')" /> </xsl:when> <xsl:when test="@NAME='CODE2'"> <xsl:value-of select="concat($outputDir,'/fr/can.xml')" /> </xsl:when> </xsl:choose> </xsl:variable> > Your code could be put into a template with a parameter representing the > language, and use the parameter to build your output directory, then > call the template as many times as needed with the appropriate language > parameter. Basic idea is to use a variable for this value, rather than > rewriting the same code twice with only the path being different. Duh! No kidding. And I'm already doing it with other parameters too. > You can certainly set this up in a single XSLT using <xsl:apply > templates> with appropriate @select and/or @mode values. You would then > write templates that match what you want to process, pull out only the > things you want, rename whatever you want, and redirect to the desired > output file. Then it's just a question of applying those templates in > the desired order. Hmmm... I'll think a bit more about this. I'm not picturing it in my head, but I haven't tried to do it either. I'll try it out first then come back when I'm stuck. Thanks, L