xsl-list
[Top] [All Lists]

Re: performing calculations with variables / params in FO using certain units (mm, px, etc)

2003-10-30 13:15:28
If I am specifying those variables as, 300mm and 200mm respectively I
suppose there will be a problem in trying to subtract them with the
units present.

Is there some way to specify a particular UNIT to be used all over so
that I can specify those values without the units appended (makes
subtraction easy)?

Is there a way to have this subtraction performed with the units
present,  without having to write intensive string parsing functions to
separate the values & units?

Yes. Below is a transformation, which uses the "transform-and-sum" template
from FXSL:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:func-transform="f:func-transform"
exclude-result-prefixes="xsl func-transform"

   <xsl:import href="transform-and-sum.xsl"/>

   <!-- to be applied on testTransform-and-sum3.xml -->

   <xsl:output method="text"/>

   <func-transform:func-transform/>

    <xsl:template match="/">
      <xsl:call-template name="transform-and-sum">
        <xsl:with-param name="pFuncTransform"
                        select="document('')/*/func-transform:*[1]"/>
        <xsl:with-param name="pList" select="//freespace"/>
      </xsl:call-template>
    </xsl:template>

    <xsl:template match="func-transform:*">
      <xsl:param name="arg" select="0"/>
      <xsl:value-of select="translate($arg, translate($arg, '0123456789',
''), '')"/>
    </xsl:template>

</xsl:stylesheet>

When applied on this source.xml:

<disks>
  <disk>
    <freespace>1235MB</freespace>
  </disk>
  <disk>
    <freespace>40MB</freespace>
  </disk>
  <disk>
    <freespace>75MB</freespace>
  </disk>
</disks>

the wanted result is produced:
1350


Another solution will consume all digits befor a non-digit is encountered -- 
this will use the "str-take-while" template.

=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL




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



<Prev in Thread] Current Thread [Next in Thread>