Subject: Re: [xsl] Slow XSLT From: Cleyton Jordan <cleytonjordan@xxxxxxxxxxx> Date: Thu, 13 Mar 2008 00:19:52 +0000 (GMT) |
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> </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> </td> <td> </td> </tr> <tr> <td> </td> <td> </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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Slow XSLT, David Carlisle | Thread | Re: [xsl] Slow XSLT, David Carlisle |
RE: [xsl] Slow XSLT, Cleyton Jordan | Date | [xsl] inserting tabs, oryann9 |
Month |