Subject: RE: 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: 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
|