[xsl] mathematical functions - specifically sqroot

Subject: [xsl] mathematical functions - specifically sqroot
From: "bix xslt" <bix_xslt@xxxxxxxxxxx>
Date: Tue, 03 Dec 2002 18:38:54 +0000
Attempting to resolve the following pseudo code:

N = number of children
sqrt = sqRoot(N)

if (sqrt - (int)sqrt > 0)
  w = (int)sqrt
  h = w + 1
else
  w = sqrt
  h = w


I came across the following xslt script. Is there a simpler way that I might be able to implement this? Currently, I am unable to download any additional software off the internet onto my PC. Consequently, I am also unable to get the xalan, xerces, and saxon programs. I am relying entirely on MSXML2.0 at this point as I have IE 5.0. However, I am attempting to develop for MSXML3.0 (or whichever version ships with IE 6.x) for an upgrade my group will receive in May 2003.


Thanks in advance,
Bix

<xsl:stylesheet version = "1.0
"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:MyRepeatGenerator="MyRepeatGenerator"
xmlns:MyRepeatableFunction="MyRepeatableFunction"
exclude-result-prefixes = "xsl msxsl MyRepeatGenerator MyRepeatableFunction" >


<xsl:import href = "within.xsl" />

<MyRepeatGenerator:MyRepeatGenerator/>

<MyRepeatableFunction:MyRepeatableFunction/>

        <xsl:template name = "sqrt" >
            <xsl:param name = "N" />
            <xsl:param name = "Eps" select = "0.1" />

<xsl:variable name = "vMyRepeat"
select = "document('')/*/MyRepeatGenerator:*[1]" />


<xsl:variable name = "vMyFunction"
select = "document('')/*/MyRepeatableFunction:*[1]" />


             <xsl:variable name = "vrtfParams" >
                <param>
                    <xsl:value-of select = "$N div 2" />
                </param>

<xsl:copy-of select = "$vMyFunction" />

                <param>
                    <xsl:value-of select = "$N" />
                </param>
            </xsl:variable>

<xsl:call-template name = "within" >
<xsl:with-param nam e = "pGenerator" select = "$vMyRepeat" />
<xsl:with-param name = "pParam0"
select = "msxsl:node-set($vrtfParams)/*" />
<xsl:with-param name = "Eps" select = "$Eps" />
</xsl:call-template>
</xsl:template>


        <xsl:template name = "myRepeater"
                     match = "*[namespace-uri()='MyRepeatGenerator']" >
            <xsl:param name = "pList" select = "/.." />
            <xsl:param name = "pParams" />

            <xsl:choose>
                <xsl:when test = "not($pList)" >
                    <xsl:copy-of select = "$pParams[1]/node()" />
                </xsl:when>
                <xsl:otherwise>
                    <xsl:apply-templates select = "$pParams[2]" >
                        <xsl:with-param name = "X"
                                        select = "$pList[last()]" />
                        <xsl:with-param name = "N"
                                       select = "$pParams[3]/node()" />
                    </xsl:apply-templates>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:template>

        <xsl:template name = "myRptFn"
                     match = "*[namespace-uri()='MyRepeatableFunction']" >
            <xsl:param name = "X" />
            <xsl:param name = "N" />

            <xsl:value-of select = "($X + ($N div $X)) div 2" />
        </xsl:template>

</xsl:stylesheet>


_________________________________________________________________
STOP MORE SPAM with the new MSN 8 and get 2 months FREE* http://join.msn.com/?page=features/junkmail



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



Current Thread