This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: sorting and numbering
- From: Jörg Heinicke <Joerg dot Heinicke at gmx dot de>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Mon, 26 Nov 2001 13:56:27 +0100 (MET)
- Subject: Re: [xsl] sorting and numbering
- References: <20011125010248.C18371@apple.fruitcom.com>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Why are you using number when you can use position? In your case number is
not necessary
<xsl:template match="body">
<xsl:apply-templates select="para[@order]">
<xsl:sort select="@order"/>
</xsl:apply-templates>
</xsl:template>
And as you can see you don't need <xsl:for-each> for sorting. It works on
<xsl:apply-templates> too.
<xsl:template match="para">
<xsl:variable name="pos" select="position()"/>
<xsl:value-of select="concat($pos, ' ', text())"/>
<xsl:for-each select="para">
<xsl:value-of select="concat($pos, '.', position(), ' ', text())"/>
</xsl:for-each>
</xsl:template>
Hope this helps,
Joerg
> I am able to sort and do multi-level numbering with code
> as following but cannot get both do work appropriately
> at the same time. The faq have examples for this but they all
> seem (needlessly) complicated to me.
>
> The problem with the xsl as below is
> a) drops the first level of numbering (this happens as soon as
> you add the for-each loop.
> b) once properly ordered on the attribute, the numbering follows
> the document order and not the sorted order.
>
>
> <!--START style content-->
> <xsl:template match="body">
> <xsl:for-each select="para[@order]">
> <xsl:sort select="@order"/>
> <xsl:apply-templates/>
> </xsl:for-each>
> </xsl:template>
>
> <xsl:template match="para">
> <xsl:number level="multi" format="1."/>
> <xsl:apply-templates/>
> </xsl:template>
> <!--END style content-->
>
> <!--START XML content-->
> <body>
> <para order="2">
> C This is number 2
> <para>
> I am one in C
> </para>
> <para>
> I am two in C
> </para>
> </para>
> <para order="1">
> B This is number 1
> <para>
> I am also one in B
> </para>
> <para>
> I am two in B
> </para>
> <para>
> I am three in B
> </para>
> </para>
> <para order="3">
> A This is number 3
> <para>
> I am three
> </para>
> </para>
> </body>
> <!--END XML content-->
>
>
> ===============
> As a final issue but not crucial issue, I would like to be able
> to have ordering and numbering for
> <body>
> <para order="2">
> C This is number 2
> <para>
> <subpara>
> Some text
> </subpara>
> <subpara>
> Some text
> </subpara>
>
> <para order="1">
> C This is number 1
> <para>
> <subpara>
> Some text
> </subpara>
> </body>
>
> --
> Eric Smith - currently using xalan and fop on linux
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
--
GMX - Die Kommunikationsplattform im Internet.
http://www.gmx.net
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list