xsl-list
[Top] [All Lists]

RE: [xsl] Slow XSLT

2008-03-13 09:57:37
Hi Michael,

I had created a global variable before like this:

<xsl:variable name="msrs"
select="/Report/Measures/Measure"/>

<xsl:for-each select="$msrs">
 <td>&#xa0;</td>
</xsl:for-each>

But it did not improve the transformation. 

Then I decided to try the For-each loop but to no
avail.

What do you thing about using keys?

Cheers

C

--- Michael Kay <mike(_at_)saxonica(_dot_)com> wrote:

  <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>

=== message truncated ===



                
___________________________________________________________ 
Yahoo! Photos ? NEW, now offering a quality print service from just 8p a photo 
http://uk.photos.yahoo.com

--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>