RE: [xsl] <xsl:sort>

Subject: RE: [xsl] <xsl:sort>
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sat, 7 May 2005 20:25:13 +0100
>   <xsl:template match="document">
> ...
>     <xsl:for-each select="child::node()">
>       <!--
>             Avoid the first two nodes occuring in document order.
>             They have already been address above.
>       -->
>       <xsl:if test="position() > 2">
>         <xsl:apply-templates select="." />
>       </xsl:if>
>     </xsl:for-each>
>     <xsl:apply-templates select="product">
>       <xsl:sort select="category" data-type="number" 
> order="descending" />
>     </xsl:apply-templates>

You're applying templates to all the child nodes after the second, and then
you're applying templates to all the child nodes that are products. These
categories presumably overlap. I haven't followed what you're trying to
achieve, but this looks very odd.

Incidentally this could be rewritten

<xsl:template match="document">
  ...
  <xsl:apply-templates select="child::node()[position() > 2]"/>
  <xsl:apply-templates select="child::product">
    <xsl:sort.../>
  </xsl:apply-templates>
</xsl:template>

Michael Kay
http://www.saxonica.com/

Current Thread