RE: [xsl] using node fragments

Subject: RE: [xsl] using node fragments
From: "Passin, Tom" <tpassin@xxxxxxxxxxxx>
Date: Mon, 14 Apr 2003 12:46:16 -0400
[ Woody [mailto:woody@xxxxxxxxxxxxxx] ]
> 
> 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"/>
>    <THEAD>
>      <ROW>
>        <ENTRY COLNAME="1">Item</ENTRY>
>        <ENTRY COLNAME="2">Control</ENTRY>
>        <ENTRY COLNAME="3">Selection</ENTRY>
>        <ENTRY COLNAME="4">Function</ENTRY>
>          </ROW>
>          </THEAD>
>                  ... lots of rows follow here
> 
> Problem here is that I need to change the COLWIDTH into 
> percentages to 
> render out to the table.
> 

Other replies to your question have pointed out that you need to either
use a node-set() extension or do the transform in two passes.  However,
if you could influence the source xml to get rid of the "in" after the
value of the COLWIDTH, then you could avoid both node-set() and two
passes. If there is still some need for specifying "in", it could be
done by using another attribute instead.

Here is a sketch of how the stylesheet could work.  I have omitted
sorting the columns and other refinements but you can add them if
necessary.

<xsl:template match="/root">
<html>
.... Other html stuff here ...
<table>
   <xsl:call-template name='do-head'/>
... invoke template for row data here ...
</table>
</html>
</xsl:template>

<xsl:template name='do-head'>
   <xsl:variable name='cols' select='TGROUP/COLSPEC'/>
      <xsl:variable name='total-width' select='sum($cols/@COLWIDTH)'/>
         <tr>
            <xsl:for-each select='$cols'>
               <xsl:variable name='width' select='100*@COLWIDTH div
$total-width'/>
                <th width='{$width}%'><xsl:value-of
select='@COLNAME'/></th>
            </xsl:for-each>
          </tr>
</xsl:template>

Cheers,

Tom P

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


Current Thread