RE: [xsl] using node fragments

Subject: RE: [xsl] using node fragments
From: TSchutzerWeissmann@xxxxxxxxxxxxxxxx
Date: Mon, 14 Apr 2003 17:03:21 +0100
Hi Woody,
> I have this section of an xml file that needs to be rendered 
> to a table
> 
> <TGROUP>
>    <COLSPEC COLNUM="1" COLNAME="1" COLWIDTH="0.713in"/>
>    <COLSPEC COLNUM="2" COLNAME="2" COLWIDTH="1.179in"/>
>    <COLSPEC COLNUM="3" COLNAME="3" COLWIDTH="1.272in"/>
>    <COLSPEC COLNUM="4" COLNAME="4" COLWIDTH="3.283in"/>
[...]
> Problem here is that I need to change the COLWIDTH into 
> percentages to 
> render out to the table.

if you want to avoid using node-set() then you will need a recursive
template to get you the total column width from which to calculate the
percentages.

To get rid of "in" etc. you can use
translate(@COLWIDTH,"abcdefghijklmnopqrstuvwxyz","") to get just the
numerical value.
  
  <xsl:template name="get_total_width">
    <xsl:param name="nodes" select="/.."/>
    <xsl:param name="sub_total" select="0"/>
    <xsl:variable name="width" 
      select="number(
              translate($nodes/@COLWIDTH,
              'abcdefghijklmnopqrstuvwxyz',
      '')
      )"/>
      <xsl:choose>
        <xsl:when test="count($nodes) &gt; 1">
           <xsl:call-template name="get_total_width">
            <xsl:with-param name="nodes" select="$nodes[position() != 1]"/>
              <xsl:with-param name="sub_total" select="$sub_total +
$width"/>
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$sub_total + $width"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>

then you can call it to get the total for the table you're looking at:


<xsl:variable name="total_width"> 
   <xsl:call-template name="get_total_width">
      <xsl:with-param name="nodes" select="TGROUP/COLSPEC[@COLNUM]"/>
   </xsl:call-template>
</xsl:variable>


and as long as the variable's in scope, use it to calculate the percentage.

hth,
Tom SW

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread