DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> XSL中幾個封裝的函數
XSL中幾個封裝的函數
編輯:XML詳解     

布爾操作函數

<!-- ======================================================== -->

<!-- Function: BooleanOR(<value1>,<value2>) => number         -->

<!-- Parameters:-                                             -->

<!--   <value1>  - the first number to be ORed                -->

<!--   <value2>  - the second number to be ORed               -->

<!-- NB. Only works with unsigned ints!                    -->

<xsl:template name="BooleanOR">

 <xsl:param name="value1" select="number(0)"/>

 <xsl:param name="value2" select="number(0)"/>

 <!-- recurse parameters -->

 <xsl:param name="bitval" select="number(2147483648)"/>

 <xsl:param name="accum" select="number(0)"/>

 <!-- calc bits present on values -->

 <xsl:variable name="bit1" select="floor($value1 div $bitval)"/>

 <xsl:variable name="bit2" select="floor($value2 div $bitval)"/>

 <!-- do the OR on the bits -->

 <xsl:variable name="thisbit">

  <xsl:choose>

   <xsl:when test="($bit1 != 0) or ($bit2 != 0)"><xsl:value-of select="$bitval"/></xsl:when>

   <xsl:otherwise>0</xsl:otherwise>

  </xsl:choose>

 </xsl:variable>

 <!-- if last recurse then output the value -->

 <xsl:choose>

  <xsl:when test="$bitval = 1"><xsl:value-of select="$accum + $thisbit"/></xsl:when>

  <xsl:otherwise>

   <!-- recurse required -->

   <xsl:call-template name="BooleanOR">

    <xsl:with-param name="value1" select="$value1 mod $bitval"/>

    <xsl:with-param name="value2" select="$value2 mod $bitval"/>

    <xsl:with-param name="bitval" select="$bitval div 2"/>

    <xsl:with-param name="accum" select="$accum + $thisbit"/>

   </xsl:call-template>

  </xsl:otherwise>

 </xsl:choose>

</xsl:template>

<!-- ======================================================== -->

<!-- Function: BooleanAND(<value1>,<value2>) => number        -->

<!-- Parameters:-                                             -->

<!--   <value1>  - the first number to be ANDed               -->

<!--   <value2>  - the second number to be ANDed              -->

<!-- NB. Only works with unsigned ints!                    -->

<xsl:template name="BooleanAND">

 <xsl:param name="value1" select="number(0)"/>

 <xsl:param name="value2" select="number(0)"/>

 <!-- recurse parameters -->

 <xsl:param name="bitval" select="number(2147483648)"/>

 <xsl:param name="accum" select="number(0)"/>

 <!-- calc bits present on values -->

 <xsl:variable name="bit1" select="floor($value1 div $bitval)"/>

 <xsl:variable name="bit2" select="floor($value2 div $bitval)"/>

 <!-- do the AND on the bits -->

 <xsl:variable name="thisbit">

  <xsl:choose>

   <xsl:when test="($bit1 != 0) and ($bit2 != 0)"><xsl:value-of select="$bitval"/></xsl:when>

   <xsl:otherwise>0</xsl:otherwise>

  </xsl:choose>

 </xsl:variable>

 <!-- if last recurse then output the value -->

 <xsl:choose>

  <xsl:when test="$bitval = 1"><xsl:value-of select="$accum + $thisbit"/></xsl:when>

  <xsl:otherwise>

   <!-- recurse required -->

   <xsl:call-template name="BooleanAND">

    <xsl:with-param name="value1" select="$value1 mod $bitval"/>

    <xsl:with-param name="value2" select="$value2 mod $bitval"/>

    <xsl:with-param name="bitval" select="$bitval div 2"/>

    <xsl:with-param name="accum" select="$accum + $thisbit"/>

   </xsl:call-template>

  </xsl:otherwise>

 </xsl:choose>

</xsl:template>

<!-- ======================================================== -->

<!-- Function: BooleanXOR(<value1>,<value2>) => number        -->

<!-- Parameters:-                                             -->

<!--   <value1>  - the first number to be XORed               -->

<!--   <value2>  - the second number to be XORed              -->

<!-- NB. Only works with unsigned ints!                    -->

<xsl:template name="BooleanXOR">

 <xsl:param name="value1" select="number(0)"/>

 <xsl:param name="value2" select="number(0)"/>

 <!-- recurse parameters -->

 <xsl:param name="bitval" select="number(2147483648)"/>

 <xsl:param name="accum" select="number(0)"/>

 <!-- calc bits present on values -->

 <xsl:variable name="bit1" select="floor($value1 div $bitval)"/>

 <xsl:variable name="bit2" select="floor($value2 div $bitval)"/>

 <!-- do the XOR on the bits -->

 <xsl:variable name="thisbit">

  <xsl:choose>

   <xsl:when test="(($bit1 != 0) and ($bit2 = 0)) or (($bit1 = 0) and ($bit2

!= 0))"><xsl:value-of select="$bitval"/></xsl:when>

   <xsl:otherwise>0</xsl:otherwise>

  </xsl:choose>

 </xsl:variable>

 <!-- if last recurse then output the value -->

 <xsl:choose>

  <xsl:when test="$bitval = 1"><xsl:value-of select="$accum + $thisbit"/></xsl:when>

  <xsl:otherwise>

   <!-- recurse required -->

   <xsl:call-template name="BooleanXOR">

    <xsl:with-param name="value1" select="$value1 mod $bitval"/>

    <xsl:with-param name="value2" select="$value2 mod $bitval"/>

    <xsl:with-param name="bitval" select="$bitval div 2"/>

    <xsl:with-param name="accum" select="$accum + $thisbit"/>

   </xsl:call-template>

  </xsl:otherwise>

 </xsl:choose>

</xsl:template>

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved