Subject: RE: [xsl] Sorting and replacing content From: "Andrew Welch" <ajwelch@xxxxxxxxxxxxxxx> Date: Wed, 1 Sep 2004 10:43:16 +0100 |
> I have this structure where the content of tags <A> to <E> > have to determine the order of tag-content <a> to <e>. The > result needs to be as shown below. > > I can manage to make a stylesheet with an <xsl:if> for each > <A> to <E> asking whether the number is 1, 2, 3, 4 or 5, but > I am sure there must be a simpler way to do this. I can not > use position() since the position af the tags can change in > the structure. > > <Root> > <a>10</a> > <b>20</b> > <c>30</c> > <d>40</d> > <e>50</e> > ... > > ... > <A>3</A> > <B>5</B> > <C>1</C> > <D>2</D> > <E>4</E> > </Root> > > Result I need: > > <no>30</no> <!-- C = 1 has to be first with the value of c > (which is 30) --> <no>40</no> <no>10</no> <no>50</no> <no>30</no> How about: <xsl:variable name="uppercase" select="'ABCDE'"/> <xsl:variable name="lowercase" select="'abcde'"/> <xsl:template match="Root"> <xsl:apply-templates select="A|B|C|D|E"> <xsl:sort select="." data-type="number"/> </xsl:apply-templates> </xsl:template> <xsl:template match="A|B|C|D|E"> <xsl:apply-templates select="/Root/*[local-name() = translate(local-name(current()), $uppercase, $lowercase)]"/> </xsl:template> <xsl:template match="a|b|c|d|e"> <no><xsl:value-of select="."/></no> </xsl:template> This sorts the uppercase elements and then calls apply-templates for the lowercase namesakes. It produces this output: <no>30</no><no>40</no><no>10</no><no>50</no><no>20</no> The last <no> is different to your example output, but I'm guessing that's a typo. cheers andrew
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Sorting and replacing con, Jarno.Elovirta | Thread | RE: [xsl] Sorting and replacing con, Jarno.Elovirta |
Re: [xsl] Sorting and replacing con, David Carlisle | Date | Re: [xsl] Sorting and replacing con, George Cristian Bina |
Month |