|
Subject: Re: [xsl] Antwort: RE: [xsl] bad programming for speedup? From: Robert Koberg <rob@xxxxxxxxxx> Date: Tue, 24 Jul 2007 08:53:02 -0400 |
Hi,
Is the OP sure that the elements wrapping the rows cannot be determined
beforehand and have templates set up for those? If so, from what I can
see, all that is needed is:
<xsl:template match="tbl-type1 | tbl-type2 | tbl-type-etc">
<table>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:appy-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
best,
-Rob
On Tue, 2007-07-24 at 14:46 +0200, Abel Braaksma wrote:
> Hi Christoph,
>
> Have you tried the other suggestions? Mainly Andrew's method (or mine
> even, if the below does what I think it does).
>
> Please allow me to make some suggestions on your code below:
>
>
>
> christoph.naber@xxxxxxxxxxxxxxxxxxx wrote:
> >
> > <xsl:template match="/">
> > <xsl:apply-templates />
> > </xsl:template>
> >
> >
>
> This is not necessary in this particular template. However, you may feel
> that having a specific entry point in your code is a matter of good
> practice (many do).
>
> >
> > <xsl:template match="*">
> > <xsl:copy>
> > <xsl:copy-of select="@*" />
> > <xsl:apply-templates select="*" />
> > </xsl:copy>
> > </xsl:template>
> >
>
> To save yourself some keystrokes (also further on), you can as well
> write the above as follows:
>
> <xsl:template match="node() | @*">
> <xsl:copy>
> <xsl:appy-templates select="node() | @*" />
> </xsl:copy>
> </xsl:template>
>
> In addition, this way (using node() instead of *), text nodes,
> processing instructions etc are also processed by your copy template.
>
> >
> > <xsl:template match="row[position() = 1 or
> > preceding-sibling::*[name() != 'row' and position() = 1]]" >
> > <table>
> > <xsl:apply-templates select="." mode="more2come"/>
> > </table>
> > </xsl:template>
> >
>
> Take a close look at the way Andrew coded this same principle. Also,
> consider an earlier remark by Justin about *not* using name() to compare
> nodes. Use self::row instead. This will help you when you are attempting
> sources that contain namespaces.
>
> > <xsl:template match="row" mode="more2come">
> > <xsl:copy>
> > <xsl:copy-of select="@*" />
> >
>
> The line above (xsl:copy-of) can be removed if you follow the remark
> made above about the copy template.
>
> > <xsl:apply-templates select="*" />
> >
>
> And this should really read:
>
> <xsl:apply-template select="node() | @*" />
>
> to make it all work well.
>
> > </xsl:copy>
> > <xsl:if test="following-sibling::*[name() = 'row' and
> > position() = 1]">
> > <xsl:apply-templates
> > select="following-sibling::row[position() = 1]" mode="more2come" />
> > </xsl:if>
> >
>
> Whenever you find yourself making an xsl:if with a node test, followed
> by an xsl:apply-templates with (largely) the same call, it is most
> likely that you can easily write it in one statement and make it clearer
> for you and fellow coders. Note that xsl:apply-templates does nothing
> when the selection contains an empty set, making the xsl:if from
> imperative programming style largely redundant.
>
> See the code of Andrew for an example.
>
>
> > </xsl:template>
> >
> > <xsl:template match="row" >
> > </xsl:template>
>
> Using the approach of Andrew, you do not need this delete-template,
> saving on keystrokes again ;)
>
> If you want it simple and fast, I believe the approach with keys is
> quicker, but not necessarily so of course. In addition, since all you do
> is plain copying and no further processing, it is likely that the
> <xsl:copy-of> constructor from my example will work the fastest
> nonetheless. But I haven't seen your source, so I couldn't tell (and
> with an optimizing processor it may matter zero after all).
>
> Cheers & happy coding ;)
>
> -- Abel Braaksma
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Antwort: RE: [xsl] bad pr, Abel Braaksma | Thread | Re: [xsl] Antwort: RE: [xsl] bad pr, Abel Braaksma |
| [xsl] Antwort: Re: [xsl] bad progra, christoph . naber | Date | Re: [xsl] Antwort: RE: [xsl] bad pr, Abel Braaksma |
| Month |