RE: [xsl] sort elements based on attribute value

Subject: RE: [xsl] sort elements based on attribute value
From: "Mac Martine" <email@xxxxxxxxxxxxxxxx>
Date: Thu, 27 Mar 2003 14:57:09 -0800
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="//*[@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 (//*[@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@xxxxxxxxxxxxxxxx]
Sent: 03 March 2003 19:33
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
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="*[@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@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Challa,
Harsha
Sent: Thursday, March 27, 2003 2:12 PM
To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
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


Current Thread