xsl-list
[Top] [All Lists]

RE: Sorting and re-ordering down a hierarchy

2003-07-22 06:20:53
Hi


-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Ragulf Pickaxe
Sent: Tuesday, July 22, 2003 9:21 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Sorting and re-ordering down a hierarchy


Hi,

I did not see any response on this (except for one who said 
he used Perl 
instead), so I tried myself.
The templates below, I thought would do what was wanted, but 
I only get it 
to sort on the 1st level, not on the second level. I do not know why.

Does anybody else have a solution, and can anyone tell me why 
my solution 
does not work?

In your stylesheet you have:
<xsl:apply-templates select="node">
  <xsl:sort select="node/rank" ... />
</xsl:apply-templates>

Here you are saying:
Apply templates to node "node" and sort it buy child::node/child::rank

Basicaly you are using node and sorting by node/node/rank (path from the
same parent)

What you want is
<xsl:apply-templates select="node">
  <xsl:sort select="rank" ... />
</xsl:apply-templates>

That way you select node and sort it by node/rank (path from the same
parent)

Hope this helps you.


Regards,
Ragulf Pickaxe :)


<xsl:template match="/">
      <output>
      <xsl:apply-templates select="input"/>
      </output>
</xsl:template>

<xsl:template match="input">
      <xsl:apply-templates select="node">
              <xsl:sort select="node/rank" data-type="number" 
order="ascending"/>
      </xsl:apply-templates>
</xsl:template>

<xsl:template match="node">
      <node>
      <xsl:copy-of select="rank"/>
      <xsl:apply-templates select="node">
      <xsl:sort select="node/rank" data-type="number" 
order="ascending"/>
      </xsl:apply-templates>
      </node>
</xsl:template>


<input>
<node>
    <rank>2</rank>
    <node>
        <rank>88</rank>
    </node>
    <node>
        <rank>7</rank>
    </node>
    <node>
        <rank>66</rank>
    </node>
</node>
<node>
    <rank>1</rank>
    <node>
        <rank>3</rank>
    </node>
    <node>
        <rank>2</rank>
    </node>
    <node>
        <rank>1</rank>
    </node>
</node>
</input>

The output I get on this is:
<output>
  <node>
    <rank>1</rank>
    <node>
      <rank>3</rank>
    </node>
    <node>
      <rank>2</rank>
    </node>
    <node>
      <rank>1</rank>
    </node>
    </node>
    <node>
      <rank>2</rank>
    <node>
      <rank>88</rank>
    </node>
    <node>
      <rank>7</rank>
    </node>
    <node>
      <rank>66</rank>
    </node>
  </node>
</output>

_________________________________________________________________
MSN 8 with e-mail virus protection service: 2 months FREE* 
http://join.msn.com/?page=features/virus


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list






 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list