电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

XSL中几个封装的函数


发布日期:2018/3/24
 
布尔操作函数

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

<! Function: BooleanOR(<value><value>) => number >

<! Parameters: >

<! <value> the first number to be ORed >

<! <value> the second number to be ORed >

<! NB Only works with unsigned ints! >

<xsl:template name=BooleanOR>

<xsl:param name=value select=number()/>

<xsl:param name=value select=number()/>

<! recurse parameters >

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

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

<! calc bits present on values >

<xsl:variable name=bit select=floor($value div $bitval)/>

<xsl:variable name=bit select=floor($value div $bitval)/>

<! do the OR on the bits >

<xsl:variable name=thisbit>

<xsl:choose>

<xsl:when test=($bit != ) or ($bit != )><xsl:valueof select=$bitval/></xsl:when>

<xsl:otherwise></xsl:otherwise>

</xsl:choose>

</xsl:variable>

<! if last recurse then output the value >

<xsl:choose>

<xsl:when test=$bitval = ><xsl:valueof select=$accum + $thisbit/></xsl:when>

<xsl:otherwise>

<! recurse required >

<xsl:calltemplate name=BooleanOR>

<xsl:withparam name=value select=$value mod $bitval/>

<xsl:withparam name=value select=$value mod $bitval/>

<xsl:withparam name=bitval select=$bitval div />

<xsl:withparam name=accum select=$accum + $thisbit/>

</xsl:calltemplate>

</xsl:otherwise>

</xsl:choose>

</xsl:template>

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

<! Function: BooleanAND(<value><value>) => number >

<! Parameters: >

<! <value> the first number to be ANDed >

<! <value> the second number to be ANDed >

<! NB Only works with unsigned ints! >

<xsl:template name=BooleanAND>

<xsl:param name=value select=number()/>

<xsl:param name=value select=number()/>

<! recurse parameters >

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

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

<! calc bits present on values >

<xsl:variable name=bit select=floor($value div $bitval)/>

<xsl:variable name=bit select=floor($value div $bitval)/>

<! do the AND on the bits >

<xsl:variable name=thisbit>

<xsl:choose>

<xsl:when test=($bit != ) and ($bit != )><xsl:valueof select=$bitval/></xsl:when>

<xsl:otherwise></xsl:otherwise>

</xsl:choose>

</xsl:variable>

<! if last recurse then output the value >

<xsl:choose>

<xsl:when test=$bitval = ><xsl:valueof select=$accum + $thisbit/></xsl:when>

<xsl:otherwise>

<! recurse required >

<xsl:calltemplate name=BooleanAND>

<xsl:withparam name=value select=$value mod $bitval/>

<xsl:withparam name=value select=$value mod $bitval/>

<xsl:withparam name=bitval select=$bitval div />

<xsl:withparam name=accum select=$accum + $thisbit/>

</xsl:calltemplate>

</xsl:otherwise>

</xsl:choose>

</xsl:template>

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

<! Function: BooleanXOR(<value><value>) => number >

<! Parameters: >

<! <value> the first number to be XORed >

<! <value> the second number to be XORed >

<! NB Only works with unsigned ints! >

<xsl:template name=BooleanXOR>

<xsl:param name=value select=number()/>

<xsl:param name=value select=number()/>

<! recurse parameters >

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

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

<! calc bits present on values >

<xsl:variable name=bit select=floor($value div $bitval)/>

<xsl:variable name=bit select=floor($value div $bitval)/>

<! do the XOR on the bits >

<xsl:variable name=thisbit>

<xsl:choose>

<xsl:when test=(($bit != ) and ($bit = )) or (($bit = ) and ($bit

!= ))><xsl:valueof select=$bitval/></xsl:when>

<xsl:otherwise></xsl:otherwise>

</xsl:choose>

</xsl:variable>

<! if last recurse then output the value >

<xsl:choose>

<xsl:when test=$bitval = ><xsl:valueof select=$accum + $thisbit/></xsl:when>

<xsl:otherwise>

<! recurse required >

<xsl:calltemplate name=BooleanXOR>

<xsl:withparam name=value select=$value mod $bitval/>

<xsl:withparam name=value select=$value mod $bitval/>

<xsl:withparam name=bitval select=$bitval div />

<xsl:withparam name=accum select=$accum + $thisbit/>

</xsl:calltemplate>

</xsl:otherwise>

</xsl:choose>

</xsl:template>

上一篇:也谈值类型与null的判等比较

下一篇:页面输出缓存