[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Incrementing a Global variable


Subject: RE: [xsl] Incrementing a Global variable
From: Mukul Gandhi <mukulw3@xxxxxxxxx>
Date: Wed, 27 Aug 2003 09:39:07 -0700 (PDT)

The XSLs (by Jarno and by -- Americo) are brilliant..
I was trying to solve the problem, but could'nt come
up with the solution soon.. 

Though the issue about incrementing the variables has
been discussed a lot on this list, I feel if there is
a feature where some sort of variable incrmenting is
possible in XSLT, it will save lot of programming
hours producing a trivial thing as generating serial
nos. I am not suggesting to deviate from the viewpoint
that XSLT should be a functional language. 

But if lets say we are allowed to declare a global
variable and can increment it, it will make certain
tasks quite easy(like generating serial nos). Since
generating serial nos is a common requirement, IMHO
providing this capability in XSLT will help the user
community. Also if we can have looping constructs
which can iterate over number ranges for e.g.

for (int i=0; i < n; i++) , it will facilitate
processing loops in a diffrent way. Presently for-each
loop iterate over *node sets*. I guess these things
might be added to XSLT without deviating from the
objective to keep XSLT as a functional language.

The XSLT 2.0 spec is in draft stage. If appropriate,
these features can be thought to be added. Probably
more knowledgeable persons on this list -- M. Kay,
Dimitre, David Carlisle, Dave Pawson, Wendell, Jeni,
Jarno, Americo.. can comment on the appropriateness of
this idea ;)

Regards,
Mukul


--- Jarno.Elovirta@xxxxxxxxx wrote:
> Hi,
> 
> > Also i have Isolated Problem Page from  Actual
> output
> > which contains multiple pdf pages. This part is
> > conditionaly separated from other pdf pages (
> which
> > are
> > further grouped using Muenchian Method)
> 
> Could you integrage this approach to your
> stylesheets?
> 
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>   <xsl:output method="html"/>
>   <xsl:variable name="varRowLimit" select="15"/>
>   <xsl:variable name="Student_Count"
> select="count(Students/Student)"/>
>   <xsl:template match="Students">
>     <title></title>
>     <table>
>       <tbody>
>         <xsl:apply-templates select="Student[1]"/>
>       </tbody>
>     </table>
>   </xsl:template>
>   <xsl:template match="Student" name="Student">
>     <xsl:param name="counter" select="1"/>
>     <tr>
>       <td>
>         <xsl:value-of select="$counter"/>
>       </td>
>       <td>
>         <xsl:value-of select="Name"/>
>       </td>
>       <td>
>         <xsl:value-of select="TOption"/>
>       </td>
>     </tr>
>     <xsl:variable name="next"
> select="following-sibling::Student[1]"/>
>     <xsl:choose>
>       <xsl:when test="not($next)">
>         <tr>
>           <td>
>             <xsl:value-of select="$counter + 1"/>
>           </td>
>           <td>
>             <xsl:text/>Total = <xsl:value-of
> select="$Student_Count"/>
>           </td>
>           <td></td>
>         </tr>
>         <xsl:call-template name="empty">
>           <xsl:with-param name="counter"
> select="$counter + 2"/>
>           <xsl:with-param name="left"
> select="$varRowLimit - $Student_Count - 3"/>
>         </xsl:call-template>
>       </xsl:when>
>       <xsl:when test="TOption = $next/TOption">
>         <xsl:apply-templates select="$next">
>           <xsl:with-param name="counter"
> select="$counter + 1"/>
>         </xsl:apply-templates>
>       </xsl:when>
>       <xsl:otherwise>
>         <xsl:call-template name="empty">
>           <xsl:with-param name="counter"
> select="$counter + 1"/>
>         </xsl:call-template>
>         <xsl:apply-templates select="$next">
>           <xsl:with-param name="counter"
> select="$counter + 2"/>
>         </xsl:apply-templates>
>       </xsl:otherwise>
>     </xsl:choose>
>   </xsl:template>
>   <xsl:template name="empty">
>     <xsl:param name="counter" select="0"/>
>     <xsl:param name="left" select="1"/>
>     <xsl:if test="$left">
>       <tr>
>         <td>
>           <xsl:value-of select="$counter"/>
>         </td>
>         <td></td>
>         <td></td>
>       </tr>
>       <xsl:call-template name="empty">
>         <xsl:with-param name="counter"
> select="$counter + 1"/>
>         <xsl:with-param name="left" select="$left -
> 1"/>
>       </xsl:call-template>
>     </xsl:if>
>   </xsl:template>
> </xsl:stylesheet>
> 
> Cheers,
> 
> Jarno - Feindflug: Größenwahn (Life Cried Remix)
> 
>  XSL-List info and archive: 
> http://www.mulberrytech.com/xsl/xsl-list
> 


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

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



Current Thread
Keywords