[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Slow XSLT

Subject: Re: Slow XSLT
From: Cleyton Jordan <cleytonjordan@xxxxxxxxxxx>
Date: Thu, 13 Mar 2008 00:19:52 +0000 (GMT)
Re:  Slow XSLT
Hi David,

Many thanks for your reply.

Sorry, I should have included you in my previous post
to Michael but there you go again. Is this explanation
clearer?

For each Row in my xml I need to output a <tr>. So I
apply templates. 

<xsl:variable name=set" select="Report/Rows//Row" />
.....
 <xsl:apply-templates select="$set"/>
.....

For each Cell within the current Row that is in the
node set I need to apply the Cell template to output
the necessary <td>s

<xsl:template name="Row">
......
<tr>
 <xsl:param name="set"/>
  <xsl:apply-templates select="$set[postion()]/*"/>
</tr>
<xsl:template>

<xsl:template name="Cell">
  When test Msr
   for each Msr
   <td> 
     <xsl:value-of select="@val" />
   </td>
  Otherwise
   For each Measure
    <td>&nbsp;</td>
<xsl:template>

However, if I do this - <xsl:apply-templates
select="$set/*"/> - I will apply templates to all the
Cell elements regardeless of the Row they belong to.
So I will have only one <tr> with lots of <td>s.
Something like that:

<tr>
<td></td> 
<td></td> 
<td></td> 
<td></td> 
<td></td> 
<td></td> 
<td></td> 
<td></td> 
</tr>

However, the output I need according to my xml below
is this:

<tr>
 <td>10</td> 
 <td>15</td> 
 <td>&nbsp;</td> 
 <td>&nbsp;</td>
</tr>
<tr> 
 <td>&nbsp;</td> 
 <td>&nbsp;</td>
 <td>45</td> 
 <td>34</td>
 <td>123</td> 
 <td>19</td> 
</tr> 

XML

<Report xmlns="">
  <Measures>
    <Measure idx="1" heading="Total Pages" />
    <Measure idx="2" heading="Cost" />
  </Measures>
  <Rows>
   <RowGrp>
    <Row heading="Name 1">
      <Cell>
        <Msr idx="1" val="10" />
        <Msr idx="2" val="15" />
      </Cell>
      <Cell/>
    <Row heading="Name 2">
      <Cell />
      <Cell>
        <Msr idx="1" val="45" />
        <Msr idx="2" val="34" />
      <Cell/>
      <Cell>
        <Msr idx="1" val="123" />
        <Msr idx="2" val="19" />
      <Cell/>
    </Row>
   </RowGrp>
  </Rows>
</Report>





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

> 
> 
> > <xsl:apply-templates select="$set[postion()]/*"/>
> 
> a numeric filter such as $set[1] is shorthand for
> the boolean filter
> $set[position()=1]
> so the above is shorthand fr
> <xsl:apply-templates
> select="$set[postion()=position()]/*"/>
> so as the test is always true it is the same as
> <xsl:apply-templates select="$set/*"/>
> 
> 
> > I need to apply templates to the child of the
> current
> > Row element that is in the $set node set. But the
> '.'
> xslt 1 doesn't have a direct test on node identity
> you can howerver
> > use, for example
> 
> select="*[count(.|$set)=count($set)]"
> 
> which selects all child elements that are in the set
> $set.
> 
> 
> > This XPATH works though:
> > 
> > <xsl:apply-templates select="./Cell"/>
>  ./ at the start of an xpath is redundent, so this
> is the same as
> 
> <xsl:apply-templates select="Cell"/>
> 
> and selects child Cell elements
> 
> 
> > How do I get the current context using a node set
> > variable?
> 
> You'd need to be clearer about what you mean here.
> . or current() will get the current context
> 
> perhaps 
> 
> select="Cell[count(.|$set)=count($set)]"
> 
> is what you need but I can't be sure from this
> description
> 
> 
> > I have created a node set of Rows:
> > 
> > <xsl:variable name=set" select="Report/Rows//Row"
> /> 
> 
> you probably don't want // there which causes a
> search to arbitrary
> depth looking for Row elements, but why do you need
> this variable 
> at all, rather than simply applying templates to the
> Row elements as
> they occur in the source?
> 
> It would seem that by 
> 
> 
> <xsl:template name="Row">
> <tr>
>  <xsl:param name="set"/>
>  <xsl:apply-templates select="$set[postion()]/*"/>
> </tr>
> <xsl:template>
> 
> 
> 
> you want to select the children of _this_ Row, but
> you don't need to do
> anything for that, just
> 
> 
> 
> <xsl:template name="Row">
> <tr>
>  <xsl:apply-templates/>
> </tr>
> <xsl:template>
> 
> would work fine wouldn't it?
> 
> David
> 
>
________________________________________________________________________
> 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. 
>
________________________________________________________________________
> 
> 



      ___________________________________________________________ 
Rise to the challenge for Sport Relief with Yahoo! For Good  

http://uk.promotions.yahoo.com/forgood/

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.