Hi. I am new to XML and XSL so please forgive my ignorance. I have tried to figure this out from the w3 spec and other resources, but mainly from trial and error (mostly error), and I am still in the dark. <!-- what I want to do --> Basically, I am using LotusXSL to generate an HTML file from my XML data. What I want to do is access a value that is obtained from one "leaf" of my XML tree at multiple points in my XSLT transformation. I am able to do this via hardcoding the xpath to the specific node, ie: <xsl:value-of select="//MYROOT/BRANCH1/MYLEAF"/> However, I thought it might be better to set a variable (that I hoped would be global). I have a called named template that is generating a small table that is a simulation of a page header. I have nested tables, each "outer" table comprising a printable page, and the "page header" inner table sits in the first row of each outer table. <!-- /what I want to do --> <!-- aside --> Eventually I will probably want to learn about FO (FOP?) and generate PDF (or some kind of printable document) but at this stage I am using HTML as my printable object. Can XSLT and FO be combined within the same XSL stylesheet, or are they mutually exclusive? <!-- /aside --> <!-- The error I am getting --> "VariableReference given for variable out of context or without definition! Name = BusinessPartnerContract" <!-- /The error I am getting --> <!-- My variable definition --> <!-- note: hardcoded here but I want to set based on XML data --> <!-- contained within a child of "MYROOT" --> <xsl:template match="MYROOT"> <xsl:variable name="BusinessPartnerContract"> This is a business partner contract. </xsl:variable> ... </xsl:template> <!-- /My variable definition --> <!-- Fragment with call to named template --> <!-- note: this fragment occurs for each "page" I want to generate --> <tr> <!-- outer --> <td colspan="2"> <!-- outer --> <xsl:call-template name="pageHeader"/> </td> <!-- outer --> </tr> <!-- outer --> <!-- /Fragment with call to named template --> <!-- Fragment of my called template --> <xsl:template name="pageHeader"> <table cellpadding="5" cellspacing="0" border="0" cols="2"> <tr> <td colspan="2" align="center" class="bigBold"> Page Title Goes Here </td> </tr> <xsl:if test="boolean($BusinessPartnerContract)"> <tr> <td colspan="2" align="center"> <u><xsl:value-of select="$BusinessPartnerContract"/></u> </td> </tr> </xsl:if> ... some more stuff goes here ... </table> </xsl:template> <!-- /Fragment of my called template --> If I set my variable within the called template, it works. So it seems my problem is the scope of the variable. I thought my variable would be global if I set it within the first template (match="MYROOT"), but I end up with a null value, ie: " <u><xsl:value-of select="$BusinessPartnerContract"/></u>" becomes "<u></u>" TIA for any help. Nick Ridout XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format