[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] problem with numbering


Subject: Re: [xsl] problem with numbering
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Mon, 16 Sep 2002 16:32:04 +0100

Hi Lars,

> I have a problem with the xsl:number-element. In the following part
> of a XML-document I am not able to produce the numbering which I
> have declared in the comments.
>
> <NUMMERIERUNG>
>    <!--1.--><NELEMENT>text1</NELEMENT>
>    <!--2.--><NELEMENT>text2</NELEMENT>
>    <NUMMERIERUNG>
>     <!--2.1--><NELEMENT>text21</NELEMENT>
>     <!--2.2--><NELEMENT>text22</NELEMENT>
>    </NUMMERIERUNG>
>    <!--3.--><NELEMENT>text3</NELEMENT>
> </NUMMERIERUNG>

That's a tough one. The multi-level numbering in XSLT is designed to
work with structures in which the ancestors of an element give it its
numbering; here, when an NELEMENT is nested inside a NUMMERIERUNG,
you're using the element before an element's parent to give it its
numbering.

I think that it's probably easiest to create a recursive template for
numbering NELEMENT elements. If an NELEMENT element's parent as a
NELEMENT preceding sibling, then apply templates to that to get the
first part of the number; the end of the number can be supplied
through a basic xsl:number:

<xsl:template match="NELEMENT" mode="number">
  <xsl:apply-templates mode="number"
    select="../preceding-sibling::*[1][self::NELEMENT]" />
  <xsl:number format="1." />
</xsl:template>

Apply templates in 'number' mode to get an NELEMENT element's number.
To get the output you want, for example, use:

<xsl:template match="NELEMENT">
  <xsl:apply-templates select="." mode="number" />
  <xsl:value-of select="." />
</xsl:template>

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords