Re: Number of node in list from stylesheet

Subject: Re: Number of node in list from stylesheet
From: Jeni Tennison <Jeni.Tennison@xxxxxxxxxxxxxxxx>
Date: Tue, 23 May 2000 14:16:49 +0100
Sebastian Rahtz wrote:
> > number, so January = 01, May = 05 and so on.  So I defined the months in
> > order within the stylesheet itself:
> > 
> > <foo:months>
> >   <foo:month name="January" abbr="Jan" />
> >   <foo:month name="February" abbr="Feb" />
>
>wouldn't it be easier to just say
>
><foo:month name="February" abbr="Feb" number="02"/>

That's what I did in the end.

However, thank you for your reply because thinking about examples to show
that it's not a good solution in situations where you want to add things to
list at random and still be able to number them gave me the following
solution:

  <xsl:variable name="monthNumber">
    <xsl:value-of
    <xsl:value-of

select="format-number(count(document('')//foo:month[following-sibling::foo:m
onth[@name = $monthName]) + 1, '00')" />
  </xsl:variable>

which works, but is a little ugly.

I also found another way that works by using xsl:number.  Within the
template have:

<xsl:variable name="monthNumber">
  <xsl:apply-templates select="document('')//foo:month" mode="getNumber">
    <xsl:with-param name="monthName" select="$monthName" />
  </xsl:apply-templates>
</xsl:variable>

and then create a template:

<xsl:template match="foo:month" mode="getNumber">
  <xsl:param name="monthName" />
  <xsl:if test="@name = $monthName">
    <xsl:number format="01" />
  </xsl:if>
</xsl:template>

This design pattern is useful when you (e.g.) want to number things in a
different document from your input XML.

Cheers,

Jeni

Dr Jeni Tennison
Epistemics Ltd, Strelley Hall, Nottingham, NG8 6PE
Telephone 0115 9061301 ? Fax 0115 9061304 ? Email
jeni.tennison@xxxxxxxxxxxxxxxx



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


Current Thread