xsl-list
[Top] [All Lists]

RE: sort elements based on attribute value

2003-03-27 15:57:09

I recently had the same question. The thread is below.

========================================

Hi,

I haven't looked at the table formatting, but hopefully this will start
you on your way...

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:output method="html"/>

  <xsl:template match="/">
    <xsl:apply-templates select="//*[(_at_)task]" mode="sorted-tasks">
      <xsl:sort select="@task"/>
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="*" mode="sorted-tasks">
    <xsl:copy-of select="."/>
  </xsl:template>
</xsl:stylesheet>

Note that I use match="*" and a mode in the second template to avoid
having to specify the match pattern (//*[(_at_)task]) in two places which
would be a maintenance nightmare if the stylesheet were much bigger.

Rgds,

Dan.


-----Original Message-----
From: Mac Martine [mailto:email(_at_)magusdesigns(_dot_)com]
Sent: 03 March 2003 19:33
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] :xsl matching/sorting recursively by attribute:



Hello-
 I am trying to match all elements with an attribute 'task' recursively
throughout the tree. I got that part working, but I have been unable to
get it 'sorted' how I want. I want all recursive elements with a 'task'
attribute to be sorted by the value of that attribute, and displayed.

So a simple xml file for this might look like:

<desktop id="desktop">
        <lineEdit task="3"/>
        <panel id="main">
                <panel id="toolbar">
                        <button task="2">Back</button>
                        <button task="1">Foward</button>
                </panel>
        </panel>
</desktop>

So, next is the xsl. This is as close I have been able to get.... Can
anyone help solve this one? Thanks a lot! -Mac

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:template match="/">
        <body>
                <table width="80%">
                        <xsl:apply-templates />
                </table>
        </body>
</xsl:template>

<xsl:template match="*">

        <xsl:for-each select="*[(_at_)task>0]">
                <xsl:sort select="@task"/>
                <xsl:call-template name="tasks"/>
        </xsl:for-each>

        <xsl:apply-templates select='*'/>
</xsl:template>

<xsl:template name="tasks">

                <tr>
                        <td width="5%">
                                <xsl:value-of select="@task"/>
                        </td>
                </tr>

</xsl:template>

</xsl:stylesheet>

-----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 
Challa,
Harsha
Sent: Thursday, March 27, 2003 2:12 PM
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] sort elements based on attribute value


Hi Gurus 


how can i sort a list of elements based on the an ascending value of an
attribute 

<elem value=3>

</elem>


<elem value=2>

</elem>


i need to sort the elements basd on attribute



gracias
 
















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



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



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