[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] Incrementing a Global variable
Subject: RE: [xsl] Incrementing a Global variable From: Rajendra S Rawat <rajsrawat@xxxxxxxxx> Date: Tue, 26 Aug 2003 03:33:55 -0700 (PDT) |
Hi! Michael I've formulated sample files to illustrate the problem: ************************************************ Input XML file:(sample.xml) --------------------------- <?xml version="1.0" encoding="UTF-8"?> <Students> <Student> <Name>SAM</Name> <TOption>English </TOption> </Student> <Student> <Name>RAJ</Name> <TOption>English </TOption> </Student> <Student> <Name>RON</Name> <TOption>English </TOption> </Student> <Student> <Name>JON</Name> <TOption>German </TOption> </Student> <Student> <Name>DON</Name> <TOption>German </TOption> </Student> <Student> <Name>MON</Name> <TOption>Hebrew </TOption> </Student> <Student> <Name>GON</Name> <TOption>Hebrew </TOption> </Student> </Students> ********************************************** HTML Output:( I'm Getting) ------------ 1 SAM English 2 RAJ English 3 RON English 4 4 JON German 5 DON German 6 6 MON Hebrew 7 GON Hebrew 10 Total = 7 11 12 13 14 15 *********************************************** HTML Output:( I Require) ------------ 1 SAM English 2 RAJ English 3 RON English 4 5 JON German 6 DON German 7 8 MON Hebrew 9 GON Hebrew 10 Total = 7 11 12 13 14 15 **************************************** XSLT File: (sample.xslt) ------------------------ <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:variable name="varRowLimit" select="15"/> <xsl:template match="Students"> <xsl:variable name="Student_Count" select="count(Student)"/> <xsl:variable name="BreakCount" select="count(Student[not(TOption = following-sibling::*/TOption)])"/> <html> <table > <xsl:for-each select="Student"> <tr> <td> <xsl:choose> <xsl:when test="position() mod $varRowLimit=0"> <xsl:value-of select="$varRowLimit "/> </xsl:when> <xsl:otherwise> <xsl:value-of select="(position() mod $varRowLimit)"/> </xsl:otherwise> </xsl:choose> </td> <td> <xsl:value-of select="Name"/> </td> <td> <xsl:value-of select="TOption"/> </td> </tr> <xsl:variable name="CurrTOption" select="TOption"/> <xsl:variable name="NextTOption" select="following-sibling::*/TOption"/> <xsl:if test="not(position()=last())"> <xsl:if test="not($NextTOption=$CurrTOption)"> <xsl:call-template name="PrintBlankRows"> <xsl:with-param name="start_count" select="position()+1"/> <xsl:with-param name="no_of_BlankRows" select="position()+2"/> </xsl:call-template> </xsl:if> </xsl:if> <xsl:if test="position()=last()"> <tr> <td> <xsl:value-of select="($Student_Count +$BreakCount ) mod $varRowLimit "/> </td> <td> Total = <xsl:value-of select="$Student_Count "/> </td> <td> <xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text> </td> </tr> <xsl:variable name="no_of_BlankLines"> <xsl:call-template name="RowsRemaining"> <xsl:with-param name="ncount" select="$Student_Count"/> </xsl:call-template> </xsl:variable> <xsl:call-template name="PrintBlankRows"> <xsl:with-param name="start_count" select="($Student_Count +$BreakCount + 1) mod $varRowLimit "/> <xsl:with-param name="no_of_BlankRows" select="(($Student_Count +$BreakCount +1) mod $varRowLimit ) + ($no_of_BlankLines - $BreakCount) "/> </xsl:call-template> </xsl:if> </xsl:for-each> </table> </html> </xsl:template> <xsl:template name="PrintBlankRows"> <xsl:param name="start_count"/> <xsl:param name="no_of_BlankRows"/> <xsl:if test="$start_count < $no_of_BlankRows"> <tr> <td> <xsl:value-of select="$start_count"/> </td> <td> <xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text> </td> <td> <xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text> </td> </tr> <xsl:call-template name="PrintBlankRows"> <xsl:with-param name="start_count" select="$start_count + 1"/> <xsl:with-param name="no_of_BlankRows" select="$no_of_BlankRows"/> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="RowsRemaining"> <xsl:param name="ncount"/> <xsl:choose> <xsl:when test="$ncount <= $varRowLimit"> <xsl:value-of select="$varRowLimit - $ncount "/> </xsl:when> <xsl:otherwise> <xsl:call-template name="RowsRemaining"> <xsl:with-param name="ncount" select="$ncount - $varRowLimit"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> **************************************************** I am trying to implement multilple transformation/node-set(). Because after first transformation, I get complex fo:block 's. So I doubt this technique will help in my case. Thanks & Regards, Raj PS: Thanks to Mukul(you got my problem.)Details are given above. --- Michael Kay <mhk@xxxxxxxxx> wrote: > Your problem description isn't very clear, but at > first sight it looks > as if the problem could easily be solved by doing > the numbering in a > second pass, i.e. by creating a result tree and then > using it as input > to a second transformation by using xx:node-set(). > > Michael Kay > > > -----Original Message----- > > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On > Behalf Of > > Rajendra S Rawat > > Sent: 25 August 2003 11:37 > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > Subject: [xsl] Incrementing a Global variable > > > > > > This drawback of XSL/XSL:FO is quite frustating > > > > > > > > I want something like this > > -------------------------------------- > > |Sl No | STUDENT NAME | TOption | > > -------------------------------------- > > | 1 | SAM | English | <- > > position()=1 > > -------------------------------------- > > | 2 | RAJ | English | <- > > position()=2 > > -------------------------------------- > > | 3 | RON | English | <- > > position()=3 > > -------------------------------------- > > | 4 | | | > > -------------------------------------- > > | 5 | JON | German | <- > > position()=4 > > -------------------------------------- > > | 6 | DON | German | <- > > position()=5 > > -------------------------------------- > > | 7 | | | > > -------------------------------------- > > | 8 | MON | Hebrew | <- > > position()=6 > > -------------------------------------- > > | 9 | GON | Hebrew | <- > > position()=7 > > -------------------------------------- > > | 10 | TOTAL= 7 | | > > -------------------------------------- > > | 11 | | | > > -------------------------------------- > > | 12 | | | > > -------------------------------------- > > | 13 | | | > > -------------------------------------- > > | 14 | | | > > -------------------------------------- > > | 15 | | | > > -------------------------------------- > > > > Pl. Note > > 1. the rows with out values > > 2. position() is not same as Sl No. > > 3. blank rows continues till end of page > > 4. after first break diff between position() and > Sl > > No. is 1 (then after second break 2 ....) > > 5. this is only a very tiny part of xml/output > used to > > just illustrate the problem, So I cannot use > static > > sl. no. (it is in a <xsl:for-each select="Student" > > ..loop) > > > > > > I have however created above table (breaks by > grouping > > and extra blank-rows by recursion) > > > > but could not get Sl. No. ordered > > I can get something like > > -------------------------------------- > > |Sl No | STUDENT NAME | TOption | > > -------------------------------------- > > | 1 | SAM | English | <- > > position()=1 > > -------------------------------------- > > | 2 | RAJ | English | <- > > position()=2 > > -------------------------------------- > > | 3 | RON | English | <- > > position()=3 > > -------------------------------------- > > | | | | > > -------------------------------------- > > | 4 | JON | German | <- > > position()=4 > > -------------------------------------- > > | 5 | DON | German | <- > > position()=5 > > -------------------------------------- > > | | | | > > -------------------------------------- > > | 6 | MON | Hebrew |<- > position()=6 > > -------------------------------------- > > | 7 | GON | Hebrew |<- > position()=7 > > -------------------------------------- > > | 10 | TOTAL= 7 | | > > -------------------------------------- > > | 11 | | | > > -------------------------------------- > > | 12 | | | > > -------------------------------------- > > | 13 | | | > > -------------------------------------- > > | 14 | | | > > -------------------------------------- > > | 15 | | | > > -------------------------------------- > > > > > > I got last sl no.(10-15) ordered by using > > 1. break-count(here 2) > > 2. Student nodes count(here 7) > > 3. total no. of rows (here 15)(fixed) > > > > Actual Problem is to print Sl No.(Here 1 to 9) > > > > Only solution I suppose, is adding 1,2... after > > 1st,2nd... breaks but for that I require a global > > variable which I can increment and add after every > > > break.........BUT....in XSL variables are read > only!!!!!!! > > > > > > can anybody show me a way? > > > > (Pl. Also Note Final out put is in PDF.Can it be > > achieved with FO .....with backgroud image or > Absolute Positioning... > > > > for this problem I also tried ft:assign but failed > to > > use it > > > > Has any body used ft:assign? ) > > > > > > > > > > tia > > > > Regards, > > Raj > > > > __________________________________ > > 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 > > > > > XSL-List info and archive: > http://www.mulberrytech.com/xsl/xsl-list > ve: 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Incrementing a Global var, Michael Kay | Thread | Re: [xsl] Incrementing a Global var, Mukul Gandhi |
[xsl] Does the html <link> tag work, Russell Watson | Date | RE: [xsl] Does the html <link> tag , Jarno . Elovirta |
Month |