может кому поможет:
с циклами у XSLT совсем туго оказалось, поэтому пришлось изгаляться через рекурсивные вызовы.
требуется подсчитать контрольную сумму строки по определенной формуле, темплейт:
Код:
<xsl:template name="checksumm">
<xsl:param name="value"/>
<xsl:param name="sum" select="0"/>
<xsl:param name="position" select="4"/>
<xsl:variable name="char" select="substring($value,$position,1)"/>
<xsl:choose>
<xsl:when test="$position < string-length($value)">
<xsl:call-template name="checksumm">
<xsl:with-param name="value" select="$value"/>
<xsl:with-param name="position" select="$position + 1"/>
<xsl:with-param name="sum" select="$sum + $position * $char"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$sum mod 10"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
короче рекурсивно вызывает сам себя пока $position < длинный строки.
сумма = (сумма+ (порядковый номер цифры * значение цифры)) MOD 10
вызов темплейта:
Код:
<xsl:variable name="sum">
<xsl:call-template name="checksumm">
<xsl:with-param name="value" select="concat('$code_start, $number, $period_opl, $sum_part_c, 'É', $sum_part_a, '<SOH>')""/>
</xsl:call-template>
</xsl:variable>
в переменной sum имеем число = контрольной сумме.
далее делаем concat для формирования barcode.