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
|