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