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(_at_)mhk(_dot_)me(_dot_)uk> 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(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On
Behalf Of
Rajendra S Rawat
Sent: 25 August 2003 11:37
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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