|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: calculating pow of numbers and a final sum
--- "Andreas Mecky" <andreasmecky@xxxxxxxx> wrote:
> Hello everybody,
>
> I am kind of a newbie to this mailing list and I have a problem that
> keeps
> me busy for some time now.
> I am working on a code generator for some java classes.
> This is my XML:
>
> <?xml version="1.0" ?>
> <logging>
> <target name="init"/>
> <target name="debug"/>
> <target name="fatal"/>
> </logging>
>
> this should result in:
>
> public static final int INIT = 1;
> public static final int DEBUG = 2;
> public static final int FATAL = 4;
> public static final int ALL = 8;
>
> I can get everything working except the numbers. How can I calculate
> the
> numbers which
> are something like counter=2^(pos-1)?
> This all entry is generated automatically. At this point I need
> either
> to
> sum all former values
> or do the same calculation as mentioned above.
>
> Some research on google did not helped me out.
Using FXSL one will utilise the powerof the "scanIter" template in the
following way:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:myDouble="f:myDouble"
xmlns:vendor="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="vendor myDouble">
<xsl:import href="iter.xsl"/>
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="vrtfPartials">
<xsl:call-template name="powers2">
<xsl:with-param name="pBits" select="count(*/target)"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="vPartials"
select="vendor:node-set($vrtfPartials)/*"/>
<xsl:for-each select="*/target">
<xsl:variable name="vPos" select="position()"/>
<xsl:value-of select="concat('
public static final int ',
@name,
' = ',
$vPartials[$vPos]
)"/>
</xsl:for-each>
<xsl:value-of select="concat('
public static final int ',
'ALL',
' = ',
2 * $vPartials[last()]
)"/>
Total is : <xsl:value-of
select="sum($vPartials) + 2 * $vPartials[last()]"/>
</xsl:template>
<xsl:template name="powers2">
<xsl:param name="pBits"/>
<xsl:variable name="vFunDouble"
select="document('')/*/myDouble:*[1]"/>
<xsl:call-template name="scanIter">
<xsl:with-param name="arg1" select="$pBits - 1"/>
<xsl:with-param name="arg2" select="$vFunDouble"/>
<xsl:with-param name="arg3" select="1"/>
</xsl:call-template>
</xsl:template>
<myDouble:myDouble/>
<xsl:template match="myDouble:*">
<xsl:param name="arg1" select="0"/>
<xsl:value-of select="2 * $arg1"/>
</xsl:template>
</xsl:stylesheet>
When this transformation is applied against your source.xml:
<logging>
<target name="init"/>
<target name="debug"/>
<target name="fatal"/>
</logging>
The result is as wanted:
public static final int init = 1
public static final int debug = 2
public static final int fatal = 4
public static final int ALL = 8
Total is : 15
Hope this helped.
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








