|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Counting Colums in WML
Hi Ciaran,
> I'm attempting to calculate the number of colums
> as the no. of columns required by the row with the most columns.
>
> So in my stylesheet I have something along the lines of
>
> <xsl:for-each select="tr">
> <xsl:choose>
> <xsl:when test="count(td) > count(preceding::td)">
> <xsl:value-of select="count(td)"/>
> </xsl:when>
> </xsl:choose>
> </xsl:for-each>
>
> How do I store the max. value ? In a param/ variable ?
You can get the maximum just with an xsl:for-each as above: go through
the table rows, using the number of table cells they contain to
organise them in descending order. Then pick off the first one:
<xsl:for-each select="tr">
<xsl:sort select="count(td)" data-type="number"
order="descending" />
<xsl:if test="position() = 1">
<xsl:value-of select="count(td)" />
</xsl:if>
</xsl:for-each>
If you're dealing with really big tables, then you might want to use
recursion instead. You need to create a template that matches a table
row. If it can find another row that has more cells than it does,
then apply templates to it. If there isn't one, then give the value
of the number of cells in this row.
<xsl:template match="tr" mode="max">
<xsl:variable name="next-larger"
select="following-sibling::tr
[count(td) > count(current()/td)][1]" />
<xsl:choose>
<xsl:when test="$next-larger">
<xsl:apply-templates select="$next" mode="max" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="count(td)" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
I hope that helps,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








