|
Subject: Re: [xsl] Optimizing XSLT iteration From: Deborah Pickett <debbiep-list-xsl@xxxxxxxxxx> Date: Mon, 08 Oct 2007 08:07:31 +1000 |
Sujata Gohad wrote:
> <xsl:for-each select="locus[position()=1]">
> <xsl:text >M </xsl:text >
> <xsl:value-of select="@ellipse_x"/ >
> <xsl:text > </xsl:text >
> <xsl:value-of select="@ellipse_y"/ >
> </xsl:for-each >
> <xsl:for-each select="locus[position()!=1]">
> <xsl:text > L</xsl:text >
> <xsl:value-of select="@ellipse_x"/ >
> <xsl:text > </xsl:text >
> <xsl:value-of select="@ellipse_y"/ >
> </xsl:for-each >
> Is there a way to faster iteration of the "locus" elements?
See if this is any quicker:
<xsl:for-each select="locus">
<xsl:choose>
<xsl:when test="position() = 1">
<xsl:text>M </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> L </xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="@ellipse_x"/ >
<xsl:text > </xsl:text >
<xsl:value-of select="@ellipse_y"/ >
</xsl:for-each>
Depending on your XSLT processor, your original code may be constructing
up to four node-sets: locus, the subset when position() = 1, locus
(again), the subset when position() != 1.
You're allowed to use position() in almost any expression, not just as
the predicate of a prior selection. In my code, position() applies to
the position that each locus has in the most recent for-each, which is
what you want.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Optimizing XSLT iteration, Sujata Gohad | Thread | Re: [xsl] Optimizing XSLT iteration, Sujata Gohad |
| [xsl] Optimizing XSLT iteration, Sujata Gohad | Date | Re: [xsl] Optimizing XSLT iteration, Sujata Gohad |
| Month |