Help with xsl:constant and Are There Xsl Variables?

Subject: Help with xsl:constant and Are There Xsl Variables?
From: "Douglas Nehring" <dnehring@xxxxxxxxxxxxxxxxxx>
Date: Mon, 19 Apr 1999 10:40:18 -0400
A little knowledge is starting to prove dangerous.  Thanks for the help with
conditionals, but I think it has just wetted by appetite.  As previous
viewers may recall, I was trying to color code entries based on a type
attribute.  However what I found myself doing was repeating a lot of "code".
Here's a snippet of what I was doing in the xsl:

<xsl:template match='entry[@type="type1"]/author'>
	<tr>
	<td WIDTH="15%">
<DIV STYLE="background-color:black; color:white; height:100%; width:100%;">
        <SPAN STYLE="font-weight:bold; color:white"></SPAN>
      Author:
</DIV>
	</td>
	<td>
<DIV STYLE="background-color:blue; color:white; width:100%;">
        <SPAN STYLE="font-weight:bold; color:white"></SPAN>
      <xsl:apply-templates/>
</DIV>

	</td>
	</tr>
  </xsl:template>


And I had to repeat this for each child element of entry and for each entry
type (i.e. for "type2" I had an exact copy of the above but with a color
specified as red-everything else was the same.)  I would like to reduce
redundant code and I see that I could specify the color as an attribute of
entry (and thereby just grab the color), but I really want to keep the
presentation separate from the content.  I took a look as the XSL spec and I
see that there are global constants <xsl:constant name="type1"
value="blue"/> , but doing something <DIV
style="background-color:{constant(../@type)} ... doesn't work for me (I'm
using XT).  Doing it this way would allow me to create a crude Hashtable to
store the type/color pairs and then lookup the color based on the entry type
attribute.  Can I lookup a constant the way I am trying or do you have to
explicitly specify the constant (i.e. {constant(type1)} ).


Another idea, ok question, I got after seeing the xsl:constant was "is there
an "xsl:variable" or equivalent"?  What I could do if there was (at least
what I would try to do) is assign the color for the entry type to the
variable and then have the <DIV style... use that variable(s) to assign
colors.  Something sort of like:
<!-somehow assign the color to a "xsl variable" based on the entry type  not
sure how to do that yet-->
TBD
<!-now use the variable to assign the color -->
<DIV STYLE="background-color:'xsl:variable value';...

I hope what I trying to convey here is clear.

Regards,
Doug Nehring


Here's the base xml and xsl I'm playing with if it's of any help.

<body>
	<entry type="type1">
		<title>title</title>
		<author>author</author>
		<desc>text</desc>
	<entry>
	<entry type="type2">
		<title>title2</title>
		<author>author2</author>
		<desc>text2</desc>
	<entry>
	<entry type="type3">
		<title>title3</title>
		<author>author3</author>
		<desc>text3</desc>
	<entry>

</body>


<portions of xsl>

<xsl:template match="entry">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" WIDTH="82%">
    <xsl:apply-templates/>
<BR/>
</TABLE>
  </xsl:template>


<xsl:template match="title">
	<tr>
<td WIDTH="15%">
<DIV STYLE="background-color:black; color:white; height:100%; width:100%;">
        <SPAN STYLE="font-weight:bold; color:white"></SPAN>
      Title:
</DIV>

</td>
<td>

<!-the background-color is what will be changing based on the entry type -->

<DIV STYLE="background-color:blue; color:white; width:100%;">
        <SPAN STYLE="font-weight:bold; color:white"></SPAN>
      <xsl:apply-templates/>
</DIV>

</td>
	</tr>
</xsl:template>

<xsl:template match="author">

	<tr>
	<td WIDTH="15%">
<DIV STYLE="background-color:black; color:white; height:100%; width:100%;">
        <SPAN STYLE="font-weight:bold; color:white"></SPAN>
      Author:
</DIV>
	</td>
	<td>
<DIV STYLE="background-color:blue; color:white; width:100%;">
        <SPAN STYLE="font-weight:bold; color:white"></SPAN>
      <xsl:apply-templates/>
</DIV>

	</td>
	</tr>

  </xsl:template>

<xsl:template match="desc">

	<tr>
	<td WIDTH="15%">
<DIV STYLE="background-color:black; color:white; height:100%; width:100%;">
        <SPAN STYLE="font-weight:bold; color:white"></SPAN>
      Reference:
</DIV>
	</td>
	<td>
<DIV STYLE="background-color:blue; color:white; width:100%;">
        <SPAN STYLE="font-weight:bold; color:white"></SPAN>
      <xsl:apply-templates/>
</DIV>

	</td>
	</tr>

  </xsl:template>




</portions of xsl

Doug Nehring
Nortel Networks
MSL-100 Advanced Technology 
Richardson, TX
(972) 685-2096, ESN 445-2096


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


Current Thread