[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Incrementing a Global variable

Subject: RE: Incrementing a Global variable
From: Rajendra S Rawat <rajsrawat@xxxxxxxxx>
Date: Tue, 26 Aug 2003 03:33:55 -0700 (PDT)
xsl variables sample
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 &lt; $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 &lt;= $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:  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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.