RE: variable question

Subject: RE: variable question
From: sara.mitchell@xxxxxxxxx
Date: Wed, 29 Dec 1999 17:51:14 -0500
Well, I can answer at least the variable scoping issue. 
Global variables are defined in the stylesheet -- not inside
any template, including the template for the root node of
the document. 

Variables only exist within the scope of the template 
that they are defined in -- so your definition is 
only valid within the root node template, but not
any subsequent templates. Do something like this: 

<xsl:stylesheet ...>

<xsl:variable name="BusinessPartnerContract" select="<set the value here>"/>

<xsl:template match="MYROOT">
...
</xsl:template>

and keep your named template. The reference inside the named template
should work now without any other changes. 

Sara
> -----Original Message-----
> From: costempd@xxxxxxxxxx [mailto:costempd@xxxxxxxxxx]
> Sent: Wednesday, December 29, 1999 9:10 PM
> To: xsl-list@xxxxxxxxxxxxxxxx
> Subject: xsl:variable question
> 
> 
> 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
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread