xsl-list
[Top] [All Lists]

RE: Choosing different sorts

2004-07-15 00:35:06
Hi,

I had a look in the archives before posting, and am
not sure I understand the method which uses:

<xsl:sort select="*[name(.) = $sortfield]"/>

Expression

  *[name(.) = $sortfield]

will return a node-set of elements whose name equal the string value of the 
variable sortfield. In xsl:sort the result is converted to a string, thus if 
the node-set contains more that one node, the string value of the first node in 
the set is used as the sort key.
 
I have tried, in my code to have:

  <xsl:for-each select="file">
     <xsl:choose>
        <xsl:when test="$sort='design'"><xsl:sort
select="name"/></xsl:when>

See the spec <http://www.w3.org/TR/xslt#element-sort>:

  "When used in xsl:for-each, xsl:sort elements must occur first."

The way around this is e.g.

  <xsl:variable name="sortkey">
    <xsl:choose>
      <xsl:when test="$sort='design'">name</xsl:when>
      <xsl:when test="$sort='stat'">status</xsl:when>
      <xsl:otherwise>id</xsl:otherwise>         
     </xsl:choose>
  </xsl:variable>
  <xsl:for-each select="file">
    <xsl:sort select="*[name() = $sortkey]"/>
    ...
  </xsl:for-each>

Cheers,

Jarno - VNV Nation: Electronaut


<Prev in Thread] Current Thread [Next in Thread>