[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Slow XSLT


Subject: Re: [xsl] Slow XSLT
From: Cleyton Jordan <cleytonjordan@xxxxxxxxxxx>
Date: Thu, 13 Mar 2008 00:53:28 +0000 (GMT)

--- David Carlisle <davidc@xxxxxxxxx> wrote:

> 
>   <xsl:variable name=set" select="Report/Rows//Row"
> />
>    .....
>    <xsl:apply-templates select="$set"/>
> 
> 
> you've given no indication of why you need this
> variable (it seems that
> it isn't needed)

The reason why I created this variable is because I
need to apply templates to all the Rows in the xml. 

However, the structure of the Rows in xml is a bit
peculiar. I can have 1, 2, 3 or even more RowGrp
elements before the Row elements. 

Since I do not know how many RowGrp elemetns I will
have I cannot do something like this:

<xsl:apply-templates select="Report/Rows/RowGrp/Row"/>
or this
<xsl:apply-templates
select="Report/Rows/RowGrp/RowGrp/Row"/>

Therefore, I created the variable using the //

<xsl:variable name=set" select="Report/Rows//Row"/>

I also read in some posts that it is faster to use a
node set in a variable. I might be wrong though. Any
suggestion considering that I can have lots of Row and
Cell elements in the xml?

<Rows>
   <RowGrp>
     <RowGrp>
       <Row heading="Name 1">
         <Cell>
           <Msr idx="1" val="10" />
           <Msr idx="2" val="15" />
         </Cell>
         <Cell/>
      </Row>
     </RowGrp>
     <RowGrp>
       <Row heading="Name 1">
         <Cell>
           <Msr idx="1" val="10" />
           <Msr idx="2" val="15" />
         </Cell>
         <Cell/>
      </Row>
    </RowGrp>
   <RowGrp>
 </Rows>

> >   <xsl:apply-templates
> select="$set[postion()]/*"/>
> 
> as I said last time, [position()] does nothing, it
> is the same as
> [true()] what do you intend it to do?

I have noticed that this does not work.

> > In the Row template I apply templates again but
> this
> > time I use the /* to get the child elements
> (Cell).
> > However, if I do this - <xsl:apply-templates
> > select="$set/*"/> - I will apply templates to all
> the
> > Cell elements. So I will have only one <tr> with
> lots
> > of <td>s. Something like that:
> 
> You just want to apply templates to the children of
> the current node,
> that's
> <xsl:apply-template select="*"/>
> or (more or less equivalently in this context) just
> <xsl:apply-templates/>

You are right. I want to apply templates to the
children of the current Row node that is in the node
set. But if it is not possible I will have to get rid
of the node set and use only apply templates Cell.

________________________________________________________________________
> The Numerical Algorithms Group Ltd is a company
> registered in England
> and Wales with company number 1249803. The
> registered office is:
> Wilkinson House, Jordan Hill Road, Oxford OX2 8DR,
> United Kingdom.
> 
> This e-mail has been scanned for all viruses by
> Star. The service is
> powered by MessageLabs. 
>
________________________________________________________________________
> 
> 



		
___________________________________________________________ 
To help you stay safe and secure online, we've developed the all new Yahoo! Security Centre. http://uk.security.yahoo.com


Current Thread
Keywords
xml