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 |