Не могу понять, почему это дает исключение StackOverflowException
Проверка на "стоп" в коде слишком слабая :
<xsl:if test="not($count = $max)">
Это всегда будет true()
, если $max
меньше $count
, , если один или оба из $max
и $count
не имеют целочисленных значений, илиесли они не определены.
Кроме того, почему $ count <$ max дает недопустимое выражение Xpath? </p>
Вы можете использовать :
not($count >= $max)
и, таким образом, избегайте необходимости экранировать символ <
.
Наконец , еще одна проблема, не связанная напрямую с основной проблемой:
Никогда не указывайте (атомарное) значение параметра в теле <xsl:with-param>
, <xsl:param>
или <xsl:variable>
.Это создает RTF (Result Tree Fragment) и требует преобразования в правильное атомарное значение при каждой ссылке на параметр / переменную.Это неэффективно, трудно читать и поддерживать и может привести к ошибкам.
Вместо :
<xsl:with-param name="count">
<xsl:value-of select="$count + 1" />
</xsl:with-param>
write :
<xsl:with-param name="count" select="$count + 1" />