Hi,
I am using XSLT 1.0 and IE6
I have written the XSLT below and it works fine.
However, when the XML has lots of RowGrp elements then
it becomes quite slow to transform.
The difficulty that I am having is to find a way to
speed it up. I think there could be two problems with
my XSLT:
1 - Recursion in the ColGrp Template mode="header"
<xsl:for-each
select="//ColGrp[count(ancestor::ColGrp)=$depth]">
2 - Also, when I am in the Col Template I have to go
back to the measures element for each Col
<xsl:for-each select="//Col">
<xsl:apply-templates select="//Measures">
<xsl:with-param name="pos" select="position()" />
</xsl:apply-templates>
</xsl:for-each>
I would appreciate if someone could sched some light.
I have read Jeni's XSLT pages (key and grouping) but
have not found any posts or example similar to mine.
Cheers
C
===========================
XML
<Reports>
<Report xmlns="">
<Measures>
<Measure idx="1" heading="Total Pages" />
<Measure idx="2" heading="Cost" />
</Measures>
<Columns>
<ColGrp heading="Quarter">
<ColGrp heading="2003">
<Col heading="Quarter 1" />
<Col heading="Quarter 2" />
<Col heading="Quarter 3" />
<Col heading="Quarter 4" />
</ColGrp>
<ColGrp heading="2004">
<Col heading="Quarter 1" />
<Col heading="Quarter 2" />
<Col heading="Quarter 3" />
<Col heading="Quarter 4" />
</ColGrp>
</ColGrp>
<!--===TOTALS====-->
<ColGrp>
<ColGrp>
<Col heading="Total" />
</ColGrp>
</ColGrp>
</Columns>
</Report>
</Reports>
==============================
XSLT
<xsl:param name="axisHeads" select="'false'" />
<xsl:variable name="msrs">
<xsl:choose>
<xsl:when test="//Measure">
<xsl:value-of select="count(//Measure)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:template match="Reports">
<xsl:apply-templates
select="Report"></xsl:apply-templates>
</xsl:template>
<xsl:template match="Report" >
<!-- Top -->
<div id="g1" style="position: absolute; top:
0px; left: 0px; width: 400px; height: 12px">
<table class="grdTop" border="0"
cellspacing="1" cellpadding="0">
<tbody>
<xsl:apply-templates select="Columns" />
</tbody>
</table>
</div>
</xsl:template>
<xsl:template match="Columns">
<xsl:apply-templates select="ColGrp[1]"
mode="Header">
<!-- 0 for top level heading, 1 to cut it out
-->
<xsl:with-param name="depth">
<xsl:choose>
<xsl:when test="$axisHeads='true'">
<xsl:value-of select="0"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="ColGrp" mode="Header">
<xsl:param name="depth" />
<tr>
<!-- the very first row needs a padding cell -->
<xsl:for-each
select="//ColGrp[count(ancestor::ColGrp)=$depth]">
<td colspan="{count(.//Col)*$msrs}"
align="center" style="overflow:none">
<nobr>
<div>
<xsl:value-of select="@heading"/>
</div>
</nobr>
</td>
</xsl:for-each>
</tr>
<xsl:choose>
<xsl:when test="ColGrp">
<xsl:apply-templates select="ColGrp[1]"
mode="Header">
<xsl:with-param name="depth"
select="$depth+1" />
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="Col[1]"
mode="colHead" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="Col" mode="colHead">
<tr>
<xsl:for-each select="ancestor::Columns//Col">
<td colspan="{$msrs}" valign="top"
align="center" style="overflow:none">
<nobr>
<!-- 2003/2004 -->
<div>
<xsl:value-of select="@heading"/>
</div>
</nobr>
</td>
</xsl:for-each>
</tr>
<tr valign="bottom">
<xsl:for-each select="//Col">
<xsl:apply-templates select="//Measures">
<xsl:with-param name="pos"
select="position()" />
</xsl:apply-templates>
</xsl:for-each>
</tr>
</xsl:template>
<xsl:template match="//Measures">
<xsl:param name="pos" />
<xsl:for-each select="Measure">
<xsl:variable name="mPos">
<xsl:value-of select="position()" />
</xsl:variable>
<td align="center">
<nobr>
<div class="action" style="width:90px;
overflow:none" onclick="sortFullGrid({$mPos}, {$pos},
'{(_at_)class}')">
<xsl:value-of select="@heading"/>
</div>
</nobr>
</td>
</xsl:for-each>
</xsl:template>
___________________________________________________________
Rise to the challenge for Sport Relief with Yahoo! For Good
http://uk.promotions.yahoo.com/forgood/
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--