xsl-list
[Top] [All Lists]

Re: [xsl] Optimizing XSLT iteration

2007-10-07 15:07:56
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.

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--