<xsl:template match="Cell[not(*)]">
<xsl:for-each select="/Report/Measures/Measure">
<td> </td>
</xsl:for-each>
</xsl:template>
Try assigning /Report/Measures/Measure to a global
variable so it only has
to be evaluated once.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Cleyton Jordan
[mailto:cleytonjordan(_at_)yahoo(_dot_)co(_dot_)uk]
Sent: 13 March 2008 16:33
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Slow XSLT
Hi Michael, David,
XSLT 1.0
The push-processing coding style demonstrated by
David
Carlisle improved the transformation quite a bit
but it still
takes 7 seconds to transform in IE and Firefox.
I was wondering if using KEYS it would help to
improve the
transformation?
If so, I would appreciate if you could help me to
produce a
key that would work.
I am posting the latest XSLT below with some
formatting. I am
also posting an XML but it is not going to be as
long as the
one I am using locally (1.5mb).
Cheers
C
Here is the latest working XSLT however it is slow
_________________________________________________
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:decimal-format name="fd1"
decimal-separator="."
grouping-separator="," NaN=" \"/>
<xsl:param name="axisHeads" select="'false'"/>
<xsl:param name="sortCol" select="'0'"/>
<xsl:param name="sortCell" select="'0'"/>
<xsl:param name="dataType" select="'text'"/>
<xsl:param name="sortOrder"
select="'ascending'"/>
<xsl:param name="ltCurFormat"
select="'$##,###.00'"/>
<xsl:param name="ltNumFormat"
select="'###,.00'"/>
<xsl:param name="heading"/>
<xsl:param name="height" select="'500'"/>
<xsl:param name="width" select="'880'"/>
<xsl:param name="id" select="'audit'"/>
<xsl:template match="Report">
<html>
<head>
<title>report</title>
</head>
<body>
<table border="1">
<xsl:apply-templates/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="Row">
<tr>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="Msr">
<xsl:choose>
<xsl:when test="string(number(@val))
='NaN'">
<td align="left" style="overflow:none">
<nobr>
<div style="width:80px;overflow:none">
<xsl:value-of select="@val"/>
</div>
</nobr>
</td>
</xsl:when>
<xsl:otherwise>
<td align="right" style="overflow:none">
<nobr>
<div style="width:80px;overflow:none">
<xsl:variable name="numberVal"
select="@val"/>
<xsl:variable name="style"
select="@class"/>
<xsl:if test="$numberVal != ''">
<xsl:choose>
<xsl:when test="$numberVal =
'-1' or
$numberVal = '0'">
<xsl:text
xml:space="preserve">-</xsl:text>
</xsl:when>
<xsl:when test="$numberVal =
'-1' or
$numberVal = '0'">
<xsl:text
xml:space="preserve">-</xsl:text>
</xsl:when>
<xsl:when
test="$style='wholeNum'">
<xsl:value-of
select="format-number($numberVal,'###,')"/>
</xsl:when>
<xsl:when
test="$style='currency'">
<xsl:value-of
select="format-number($numberVal,$ltCurFormat)"/>
</xsl:when>
<xsl:when
test="$style='percent'">
<xsl:value-of
select="format-number($numberVal * 100,'0.00')"/>
<xsl:text>%</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="format-number($numberVal,$ltNumFormat)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="$numberVal = ''">
<xsl:text
xml:space="preserve">-</xsl:text>
</xsl:if>
</div>
</nobr>
</td>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="Cell[not(*)]">
<xsl:for-each
select="/Report/Measures/Measure">
<td> </td>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
=====================================
XML
___
<?xml version="1.0" encoding="utf-8" ?>
<Report name="audit" title="Audit"
date="03-11-2008">
<Measures>
<Measure idx="1" heading="Total Pages"
class="num1"/>
<Measure idx="2" heading="Cost" class="cur1"/>
<Measure idx="3" heading="Total Ads"
class="num1"/>
<Measure idx="4" heading="Insert Pages"
class="num1"/>
</Measures>
<Columns>
<ColGrp heading="Month">
<ColGrp heading="2003">
<ColGrp heading="Quarter 1">
<Col heading="January"/>
</ColGrp>
</ColGrp>
</ColGrp>
</Columns>