xsl-list
[Top] [All Lists]

RE: generic sort based on attribute names

2005-01-23 10:37:24
This is quite tricky in XSLT 1.0 as the sort key has to be expressed as an
XPath expression, it can't be computed using XSLT code. In 2.0 (a) XPath
expressions are more powerful, and (b) you can do an XSLT computation inside
the xsl:sort.

Here's a solution using the latter approach:

<xsl:for-each select="e">
  <xsl:sort>
    <xsl:for-each select="@*">
      <xsl:sort select="name()"/>
      <xsl:value-of select='name(), "=""", ., """ "' separator=""/>      
    </xsl:for-each>
  </xsl:sort>
  <xsl:copy-of select="."/>
</xsl:for-each>

Not tested; and note (a) this doesn't handle namespaces, and (b) it doesn't
attempt to change the order of attributes in the output, since that's not
under XSLT's control anyway.

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

-----Original Message-----
From: Chaitanya Desai [mailto:cdesai(_at_)syncata(_dot_)com] 
Sent: 23 January 2005 03:23
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] generic sort based on attribute names


Hi,
I am trying to write a generic sort that uses the 'concatenated 
name-value pairs of all attributes sorted' as the key to sort 
elements 
at a particular level.
Example
Suppose
<root>
 <e b="bb" y="yy"/>
 <e z="zz" a="aa"/>
</root>
is the XML I want to sort.
The result of the sort should be
<root>
  <e a="aa" z="zz" />
  <e b="bb" y="yy" />
</root>
Thus the attributes within an element are sorted and then the 
key used 
for sorting elements would be:
'az' and 'by' respectively (thus 'az' < 'by').
I am able to sort attributes within an element.
But I am having trouble setting the key to sort for elements.
Any help would be greatly appreciated.
Thanks
Chaitanya

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--