Subject: RE: [xsl] summation of attributes From: Jarno.Elovirta@xxxxxxxxx Date: Tue, 27 May 2003 12:20:17 +0300 |
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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] summation of attributes, michael . bierenfeld | Thread | Re: RE: [xsl] summation of attribut, michael . bierenfeld |
[xsl] summation of attributes, michael . bierenfeld | Date | [xsl] position() seems always to be, Steve |
Month |