xsl-list
[Top] [All Lists]

mathematical functions - specifically sqroot

2002-12-03 11:38:54
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



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