Re: [xsl] How to sort attribute?

Subject: Re: [xsl] How to sort attribute?
From: Mukul Gandhi <gandhi.mukul@xxxxxxxxx>
Date: Sat, 13 Aug 2005 21:27:00 +0530
I thought this code should have sorted attribute nodes by names(seems
logical). I tested with Saxon 8.4, and it sorted the attributes by
name.

<xsl:for-each select="@*">
   <xsl:sort select="name()"/>

I remember David Carlisle telling some time back on XSL-List, that XML
Spec is notoriously famous for such anomalies.

Regards,
Mukul

http://gandhimukul.tripod.com

On 8/13/05, Ross, Douglas <DRoss@xxxxxxxxxx> wrote:
> John,
>
> Since Michael Kay points out that attribute order is implementation
> dependent and not quaranteed, you might consider transforming your
> attributes into elements, where element order is quaranteed to be
> maintained in document order. You could change Mukul's stylesheet
> slightly:
>
> <xsl:template match="x">
>   <x>
>     <xsl:for-each select="@*">
>      <xsl:sort select="name()"/>
>        <!-- change this to element tag:
>      <xsl:attribute name="{name()}"><xsl:value-of
> select="."/></xsl:attribute> -->
>       <xsl:element name="{name()}"><xsl:value-of
> select="string(.)"/></xsl:element>
>     </xsl:for-each>
>   </x>
> </xsl:template>
>
>
> Douglas Ross
> Senior Software Engineer, Advanced Development
> Kronos
> www.kronos.com
> Improving the Performance of People and Business(tm) by making software
> Smaller, Faster, Sharper, Easier
>
>
> -----Original Message-----
> From: Mukul Gandhi [mailto:gandhi.mukul@xxxxxxxxx]
> Sent: Saturday, August 13, 2005 5:33 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] How to sort attribute?
>
> Hi John,
>  This could be the use-case for the problem you are trying to solve.
>
> XML file -
> <root>
>  <x a="1" d="2" c="4" />
> </root>
>
> XSLT file -
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> version="1.0">
>
> <xsl:output method="xml" indent="yes" />
>
> <xsl:template match="/root">
>   <xsl:apply-templates select="x" />
> </xsl:template>
>
> <xsl:template match="x">
>   <x>
>     <xsl:for-each select="@*">
>      <xsl:sort select="name()"/>
>      <xsl:attribute name="{name()}"><xsl:value-of select="."
> /></xsl:attribute>
>     </xsl:for-each>
>   </x>
> </xsl:template>
>
> </xsl:stylesheet>
>
> Regards,
> Mukul
>
> On 8/13/05, John Li <johnli121@xxxxxxx> wrote:
> > Hi,
> >
> > When exporting one node and its attribute, I want to sort its
> attributes
> > lexicographic. I try it as below but always fail. Anyone could help?
> >
> > <xsl:for-each select="@*">
> >    <xsl:sort select="name()"/>
> >    <xsl:copy/>
> > </xsl:for-each>
> >
> > Thanks,
> > John

Current Thread