[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: summation of attributes

Subject: RE: summation of attributes
From: Jarno.Elovirta@xxxxxxxxx
Date: Tue, 27 May 2003 12:20:17 +0300
fo table column attributes
Hi,
 
> I am having a fop document that has to be transferred to 
> html. Right now I am struugling with the following situation. 
>  
> fop.xml : 
>  
> *snip* 
> <fo:table width="100%"> 
>  
> 	<fo:table-column column-width="proportional-column-width(68)"/> 
> 	<fo:table-column column-width="proportional-column-width(95)"/> 
>  
> 	.... continued .... 
>  
> </fo:table> 
> *snip> 
>  
> this has to be transferred to 
>  
> <table> 
> 	<colgroup> 
> 		<col width="41%"/>     <!-- 68 * 100 / (68 + 95) --> 
> 		<col width="59%"/>     <!-- 95 * 100 / (68 + 95) --> 
> 	</colgroup> 
>  
>     .. continued ... 
> </table> 

Erm... I suppose you have a good reason for it, but why on earth are you transforming FO to HTML?
  
> right know I am using the following templates 
>  
> <xsl:template match="fo:table"> 
> 	<table> 
> 		<xsl:variable name="summated_attributes" 
> select="sum(fo:table-column/ @column-width)"/> 
> 		<colgroup> 
> 			<xsl:apply-templates match="fo:table-column"> 

xsl:apply-templates doesn't have a match attribute--you want select.

[snip]

> 		<xsl:attribute name="width" 
> select="@column-width * 100 div $total_sum">%</xsl:attribute> 

xsl:attribute doesn't have select attribute. Use containing xsl:value-of.

> unfortunatly column-width is encoded as 
> "proportinal-column-with(68)" where 68 is the value I need 
> therefore I am also doing 
>  
> <xsl:template match="@column-width"> 
> 	<xsl:value-of select="substring(., 27,2)"/> 
> </xsl:template> 

Which would give you the valua, but the above 

  @column-width * 100 div $total_sum

Expression will not apply the template for @column-witdth, but rather just first retrieves the string value of @column-witdth and then casts that to a number. You need to call xsl:apply-templates explicitly inside an xsl:variable to use the template.
  
> _but this is not working_ 
>  
> does anybody have an idea ? 

For example

  <xsl:template match="fo:table">
    <table>
      <colgroup>
        <xsl:apply-templates select="fo:table-column">
          <xsl:with-param name="total_sum">
            <xsl:call-template name="sum">
              <xsl:with-param name="node-set" select="fo:table-column/@column-width"/>
            </xsl:call-template>
          </xsl:with-param>
        </xsl:apply-templates>
      </colgroup>
    </table>
  </xsl:template>
  <xsl:template match="fo:table-column">
    <xsl:param name="total_sum"/>
    <xsl:variable name="width">
      <xsl:apply-templates select="@column-width"/>
    </xsl:variable>
    <col width="{round($width * 100 div $total_sum)}%"/>
  </xsl:template>
  <xsl:template match="@column-width">
    <xsl:value-of select="substring(., 27,2)"/>
  </xsl:template>
  <!--recursive template to calculate the sum of @column-width values-->
  <xsl:template name="sum">
    <xsl:param name="node-set" select="/.."/>
    <xsl:param name="sum" select="0"/>
    <xsl:choose>
      <xsl:when test="$node-set">
        <xsl:variable name="width">
          <xsl:apply-templates select="$node-set[1]"/>
        </xsl:variable>
        <xsl:call-template name="sum">
          <xsl:with-param name="node-set" select="$node-set[not(position() = 1)]"/>
          <xsl:with-param name="sum" select="$sum + $width"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$sum"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

Cheers,

Jarno - SITD: Mortal (RMX by Solitary Experiments)

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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.