xsl-list
[Top] [All Lists]

[xsl] xsl:sort descending causes attribute nodes to be created after children, causing an error

2007-01-16 06:02:25
Hi XSLT'ers,

The following issue is easy to workaround, but I am wondering if this is correct behavior after the XSLT 2 (or even 1) recommendation.

With an xsl:apply-template that includes attribute nodes in its select-attribute, and you apply an xsl:sort on the children, then it happens that the attribute nodes are created after the children when the order of xsl:sort is descending. I tried google on this, but couldn't find something useful.

The example below throws the following error:
"An attribute node (count) cannot be created after the children of the containing element"

I did not try other parsers. The xslt employs a simple copy idiom and sorts the rows of the input in $data. Call the XSLT on itself to see the error or the results:

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

   <xsl:output indent="yes" />
<xsl:variable name="data">
       <rows count="3">
           <row>bbbb</row>
           <row>aaaa</row>
           <row>cccc</row>
       </rows>
   </xsl:variable>
<xsl:template match="/">
       <xsl:apply-templates select="$data/*" />
   </xsl:template>
<xsl:template match="node() | @*">
       <xsl:copy>
           <xsl:apply-templates select="node() | @*" />
       </xsl:copy>
   </xsl:template>

   <xsl:template match="rows">
       <xsl:copy>
           <xsl:apply-templates select="node() | @*">
               <xsl:sort
                   select="text()"
                   order="descending" />
           </xsl:apply-templates>
       </xsl:copy>
   </xsl:template>

</xsl:stylesheet>


Any thoughts on this? Is this behavior desired and/or required, or is this the processor's mistake?

Btw: a possible workaround is to apply the attribute node first.

Cheers,
-- Abel Braaksma
  http://www.nuntia.nl



--~------------------------------------------------------------------
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>
--~--