Re: [xsl] assigned variable value is changing

Subject: Re: [xsl] assigned variable value is changing
From: Ganesh Babu N <nbabuganesh@xxxxxxxxx>
Date: Mon, 3 Aug 2009 13:16:21 +0530
Hai,

In the Name attribute i am capturing column number: row number.

Check the row[2]. In that we are having only 2 <entry>s instead of 3
because of the colspan.
So in my output i am increasing the column number of the 2nd <entry>
by the colspan value.

so for 2nd entry the value of @Name  is 2:1

Up to here the code is working correctly. after that in the column
number i am getting NaN. Even though i have included test conditions.

Regards,
Ganesh

On Sat, Aug 1, 2009 at 6:25 PM, Martin Honnen<Martin.Honnen@xxxxxx> wrote:
> Ganesh Babu N wrote:
>
>> input :
>>
>>                                <tbody>
>>                                        <row>
>>                                                <entry namest="c1"
>> nameend="c3" align="left" valign="top">Table
>> 1 Title</entry>
>>                                        </row>
>>                                        <row>
>>                                                <entry namest="c1"
>> nameend="c2" align="left" valign="top">Table
>> 1 TH C1 R1 and TH C2 R1 merged</entry>
>>                                                <entry align="left"
>> valign="top">Table 1 TH C3 R1</entry>
>>                                        </row>
>>                                        <row>
>>                                                <entry align="left"
>> valign="top">Table 1 TH C1 R2</entry>
>>                                                <entry align="left"
>> valign="top">Table 1 TH C2 R2</entry>
>>                                                <entry align="left"
>> valign="top">Table 1 TH C3 R2</entry>
>>                                        </row>
>>                                        <row>
>>                                                <entry align="left"
>> valign="top">Table 1 TB C1 R4</entry>
>>                                                <entry align="left"
>> valign="top">Table 1 TB C2 R4</entry>
>>                                                <entry align="left"
>> valign="top">Table 1 TB C3 R4</entry>
>>                                        </row>
>>                                        <row>
>>                                                <entry align="left"
>> valign="top">Table 1 TB C1 R5</entry>
>>                                                <entry align="left"
>> valign="top" morerows="1">Table 1 TB C2 R5
>> and TB C2 R6 are merged</entry>
>>                                                <entry align="left"
>> valign="top">Table 1 TB C3 R5</entry>
>>                                        </row>
>>                                        <row>
>>                                                <entry align="left"
>> valign="top">Table 1 TB C1 R6</entry>
>>                                                <entry align="left"
>> valign="top">Table 1 TB C3 R6</entry>
>>                                        </row>
>>                                </tbody>
>>
>
>> Code tried:
>>
>>        <xsl:template match="entry">
>>                <xsl:param name="colc">
>>                        <xsl:number level="single" count="entry"/>
>>                </xsl:param>
>>                <cell>
>>                        <xsl:attribute name="Name">
>>                                <xsl:variable name="rowc">
>>                                        <xsl:number level="any"
>> count="row"/>
>>                                </xsl:variable>
>>                                <xsl:if
>> test="contains(preceding-sibling::entry[1],@namest)">
>>                                        <xsl:value-of select="$colc - 1 +
>> number(substring-after(preceding-sibling::entry[1]/@nameend,'c')) -
>> number(substring-after(preceding-sibling::entry[1]/@namest,'c'))"/>
>>                                </xsl:if>
>>                                <xsl:if
>> test="not(contains(preceding-sibling::entry[1],@namest))">
>>                                        <xsl:value-of select="$colc - 1"/>
>>                                </xsl:if>
>>                                <xsl:text>:</xsl:text>
>>                                <xsl:value-of select="$rowc - 1"/>
>>                        </xsl:attribute>
>> </xsl:template>
>
>> I have declared a param "colc" and i am manipulating according to the
>> condition. But when i use condition the value of "colc" is changing.
>>
>> I am unable to understand why the value is changing and how to stop
>> this change.
>
> Can you explain in plain English what you want to check? You have a
template
> matching 'entry' elements and then you have an expression
>
>  contains(preceding-sibling::entry[1],@namest)
>
> In your posted input there are only two 'entry' elements at all that have a
> 'namest' attribute, the first 'entry' element in the first 'row' element
and
> the first 'entry' element in the second 'row' element. Both do not have any
> preceding-sibling::entry so even for the 'entry' elements having 'namest'
> attribute I am not sure what you want to check.
>
> The behaviour of contains is defined for such cases
> (http://www.w3.org/TR/xpath-functions/#func-contains) but it is rather
> difficult to understand what you want to check for if all evaluations of
the
> expressions against the sample XML result in such edge cases of one or two
> arguments being the empty sequence.
>
>
> --
>
>        Martin Honnen
>        http://msmvps.com/blogs/martin_honnen/

Current Thread