Tempore 20:08:53, die 01/27/2005 AD, hinc in
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com scripsit Güray Sen <guray(_at_)novaeres(_dot_)com>:
I would like to sort some XML data by the names of the elements.
I have found some XSLT that does that on the net, but there seems to be a
problem when the elements have attributes. Is there a way to accomplish
the above (possibly by finetuning the XSLT below)?
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-template select="@* | node()">
<xsl:sort select="name()"/>
</xsl:apply-template>
</xsl:copy>
Hi,
Indeed, attribute nodes have to be copied to the result tree before any
nodes of another type. Because of the sorting, the node-set loses document
order and thus cannot any longer guarantee that the attributes are
processed earlier than the elements and text nodes.
one solution is this:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*">
<xsl:sort select="name()"/>
</xsl:apply-templates>
<xsl:apply-templates select="node()">
<xsl:sort select="name()"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
But since the relative output order of attributes after serialization of
the result tree depends on the processor, you might as well omit the
attribute sorting:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="node()">
<xsl:sort select="name()"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
regards,
--
Joris Gillis (http://www.ticalc.org/cgi-bin/acct-view.cgi?userid=38041)
Laudeo W3C et dona ferens
--~------------------------------------------------------------------
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>
--~--