RE: [xsl] Sorting XML Elements alphabetically

Subject: RE: [xsl] Sorting XML Elements alphabetically
From: "Peter Loh Yoon Chao" <yoonchao@xxxxxxxxxxxxxx>
Date: Sat, 14 Feb 2004 19:01:17 +0800
Hi Michael,

> > Thanks for your suggestions.  Michael, the following
> > variation of your suggestion came close to giving me the
> > desired result.
> >
> > <xsl:template match="@* | node()">
> >  <xsl:copy>
> >  <xsl:apply-templates select="@* | node()">
> >    <xsl:sort select="name()"/>
> >  </xsl:apply-templates>
> >  </xsl:copy>
> > </xsl:template>
> >
> > However, there are 2 problems:
> > 1.)  It breaks when there are attributes in the source document, e.g.
> Why did you change my code, which didn't have this problem?

In your code, <xsl:copy> was not closed by a matching </xsl:copy>.  I
guessed that you had wanted an empty element.  With that I got the following
output, which is not well-formed XML:


I took another stab and placed </xsl:copy> after </xsl:apply-templates> and
got the following output, which was sorted but did not contain any data:


Since you mentioned identity template, I searched around the web for
examples and added the sort at what I thought to be an appropriate location.
I only tried putting attributes after getting some decent result from this.

> > 2.)  The formatting in the output is all out of whack, losing
> > its original identation and has extra blank lines, like the following:
> >
> Use xsl:strip-space.

Do I use this as an empty element?  I tried this and also enclosing
appropriate sections of my code with this, but the stylesheet processor
complained each time that:

javax.xml.transform.TransformerException: xsl:strip-space is not allowed in
 position in the stylesheet!

When used appropriately, would this give me the original proper identation
(which is the goal)?  Would appreciate your input.  Thanks.


 XSL-List info and archive:

Current Thread