Subject: Re: Create Table
From: "Eric J. Bowman" <eric@xxxxxxxxxxxxxxxx>
Date: Sat, 27 Mar 2010 01:22:26 -0600
|
> So this answer extends the example already given, by adding the number
> () function.
>
Heh, don't listen to me, I'm still learning myself... number() isn't
needed here, as this works just fine:
<th><xsl:value-of select='./@lineId+1'/></th>
What I've just learned, is that I need to take a closer look at how
XSLT processors handle typing, my answer assumed number() was needed in
order to perform addition like you were trying, and was thus totally
wrong.
Anyway, I played around with it a bit more, adding this to my <tr>
template:
<xsl:param name='x' select='./@lineId'/>
And changing the <th> two different ways, as follows:
<th><xsl:value-of select='following-sibling::data[@lineId=$x]/@lineId'/></th>
<th><xsl:value-of select='following-sibling::data[@lineId=$x+1]/@lineId'/></th>
The first line results in <th/>, the second line works as expected.
The first line can be rewritten as select='//data[@lineId=$x]/@lineId'
and it will work as expected. So I suspect your problem is one of not
minding your context node, i.e. you started with this:
<xsl:param name='x' select='./@lineId'/>
Then, you have <xsl:value-of select='data[@lineId=$x]'/>, which can't
work because you haven't selected an axis... So it's hard to know how
to specifically help you here -- the 'data[@lineId=$x]' is correct, but
only if it's preceded by a proper axis, and followed by '/@lineId' since
you're after attribute content, instead of element content.
-Eric
|