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