|
Subject: Re: [xsl] number continuation problem From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Fri, 27 Jun 2003 15:45:39 +0100 |
David wrote:
>> The way Ive resolved it is to build a temporary tree that flattens
>> out the hierarchy to a single level,
>
> yes I was going to suggest the same (unless Jeni rises to the
> challenge of doing it in one pass:-)
Well, I think you can do it with the following, though it's a bit
tedious if you have a big document because you need to work out the
number of the previous node to work out this one:
<xsl:template match="node" mode="number">
<xsl:choose>
<xsl:when test="preceding::node">
<xsl:variable name="number">
<xsl:choose>
<xsl:when test="not(preceding-sibling::node)">
<xsl:choose>
<xsl:when test="parent::if">
<xsl:variable name="else" select="preceding::node[1]/parent::else" />
<xsl:choose>
<xsl:when test="$else">
<xsl:variable name="if-number">
<xsl:apply-templates select="$else/preceding-sibling::if[1]/node[last()]"
mode="number" />
</xsl:variable>
<xsl:variable name="else-number">
<xsl:apply-templates select="preceding::node[1]"
mode="number" />
</xsl:variable>
<xsl:choose>
<xsl:when test="$if-number > $else-number">
<xsl:value-of select="$if-number" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$else-number" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="preceding::node[1]" mode="number" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="number">
<xsl:apply-templates
select="parent::else/preceding-sibling::if[1]/node[1]" mode="number" />
</xsl:variable>
<xsl:value-of select="$number - 1" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="preceding::node[1]" mode="number" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$number + 1"/>
</xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:template>
I was thinking about a recursive solution that would step through the
<node> elements one-by-one, but the nested <if>s make it pretty
difficult.
Anyway, I'm sure that flattening is a much better approach...
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] number continuation probl, David Carlisle | Thread | Re: [xsl] number continuation probl, David Carlisle |
| RE: [xsl] XSLT Recursive Templates, Michael Kay | Date | RE: [xsl] Chain of XSL Transformati, Passin, Tom |
| Month |