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

Re: [xsl] Create Table


Subject: Re: [xsl] 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


Current Thread
Keywords