xsl-list
[Top] [All Lists]

Adding Several Numerical Attribute Values into One Attribute

2005-07-11 06:03:02
 
Hi,

I'm trying to translate an xml table into html and I want to offset the
table head with a horizontal rule that spans the entire width of the
table.
So I need to generate a colspan attribute value that consists of all
other colspan attribute values.
If the colspan attribute is missing or "NaN", add one to the value.
I also have to use XML 1.0.

For example:
 
<tr>
        <th colspan="1"></th>
        <th colspan="2"></th>
        <th colspan="NaN"></th>
</tr>
 
I would need a colspan attribute that contains the value of 4.

I know that variables and parameters in XSLT don't work the same as a
coder is used to. I've looked at a few examples that simulate an
incrementing variable through a parameter so you can process a loop,
which I believe to be a similar situation to the one that I'm dealing
with, except I need to add a variant value depending on the attribute.
 
Here is an example of my XSL that doesn't work:
 
<xsl:template match="thead">
                <tr>
                        <td>
                                <xsl:attribute
name="colspan"><xsl:call-template name="get-col-span"/></xsl:attribute>
                                <hr noshade="noshade"/>
                        </td>
                </tr>
        <xsl:apply-templates/>
</xsl:template>
 
<xsl:template name="get-col-span">
        <xsl:apply-templates select="tr[1]" mode="build-col-span"/>
</xsl:template>
 
<xsl:template match="tr" mode="build-col-span">
        <xsl:param name="colspan_var"/>
        <xsl:call-template name="get-th">
                <xsl:with-param name="colspan_var">0</xsl:with-param>
        </xsl:call-template>
</xsl:template>
 
<xsl:template match="th" name="get-th">
        <xsl:choose>
                <xsl:when test="@colspan != ''">
                        <xsl:choose>
                                <xsl:when test="@colspan != 'NaN'">
                                        <xsl:param name="colspan_var"
select="$colspan_var + @colspan"/>
                                </xsl:when>
                                <xsl:otherwise>
                                        <xsl:param name="colspan_var"
select="$colspan_var + 1"/>
                                </xsl:otherwise>
                        </xsl:choose>
                </xsl:when>
                <xsl:otherwise>
                        <xsl:param name="colspan_var"
select="$colspan_var + 1"/>
                </xsl:otherwise>
        </xsl:choose>
        
        <xsl:variable name="next" select="following-sibling::th[1]"/>
        <xsl:choose>
                <xsl:when test="!($next)">
                        <xsl:value-of select="$colspan_var"/>
                </xsl:when>
                <xsl:otherwise>
                        <xsl:call-template name="get-th">
                                <xsl:with-param
name="colspan_var"><xsl:value-of
select="$colspan_var"/></xsl:with-param>
                        </xsl:call-template>
                </xsl:otherwise>
        </xsl:choose> 
</xsl:template>
 
I know there is a problem with how I'm setting up my parameter value in
the get-th template. I'm not even sure if I'm addressing this problem in
the proper manner. Any help would be greatly appreciated. Thanks!
 

 

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>