xsl-list
[Top] [All Lists]

RE: Something similar to managing behavior with a variable

2005-04-05 11:36:02

Here are some of the design patterns you might consider:

(a) computing the column number based on the counting selected nodes in the
source tree (using count() or xsl:number) 

(b) computing the number based on the position of the node in the current
node list (the position() function)

(c) "iterating" over the nodes by head-tail recursion, maintaining a counter
as you do so (by passing a parameter on the recursive call)

(d) a two-phase transformation in which you generate the output nodes as a
plain sequence in the first pass and then number them or group them (or
colour them) in a second pass.

Michael Kay
http://www.saxonica.com/



-----Original Message-----
From: Luke Shannon [mailto:lshannon(_at_)futurebrand(_dot_)com] 
Sent: 05 April 2005 18:57
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Something similar to managing behavior with a variable

Hello;

I'm creating a UI that writes rows of data. The background of 
the row needs
to changes every second row. I was doing it like this:

<tr align="left" valign="middle" class="grey1ColumnText">
<xsl:choose>
<xsl:when test='number($position) mod 2 != 0'>
<xsl:attribute name="class">grey1ColumnText</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="class">grey2ColumnText</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</tr>

My problem now is now have a condition that determines when a 
row is to be
written. So, in a collection of 5 items maybe only 1 and 4 
get written. I
still need a way to figure out how to alternate the 
background for the rows
that actually get written. Position no longer does the trick.

I thought I could keep the previous background in a variable 
like below:

<tr align="left" valign="middle" class="grey1ColumnText">
<xsl:choose>
<xsl:when test="$resultBK = 'grey1ColumnText'">
<xsl:attribute name="class">grey2ColumnText</xsl:attribute>
<xsl:variable name="resultBK" select="string('grey2ColumnText')"/>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="class">grey1ColumnText</xsl:attribute>
<xsl:variable name="resultBK" select="string('grey1ColumnText')"/>
</xsl:otherwise>
</xsl:choose>
</tr>

But I have just found out you can't change the contents of a 
global variable
(resultBK) after it has been defined. How can I handle this?

Thanks,

Luke

Luke Shannon | Software Developer
FutureBrand Toronto

207 Queen's Quay, Suite 400
Toronto, ON, M5J 1A7
416 642 7935 (office)



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--