XSLT: Как подсчитать итоговую сумму за цикл xsl:for-each?

Есть файл XML:

<?xml version="1.0" encoding="utf-8"?>
<section num="1.2">
  <caption>1. Заголовок для этого текста</caption>
  <page>
    <text>
      <p>В случае неправильного ответа.</p>
      <p>Перед началом предаттестационной подготовки.</p>
      <p>Работники службы автоматизации и метрологического обеспечения .</p>
      <p>После замены диафрагмы в узле учета газа на ГРС № 1 было необходимо провести пуск.</p>
    </text>
  </page>
</section>

Надо выводить строки до тех пор, пока суммарное количество букв (длина строк во всех тегах Р) не превышает 100. Мой вариант XSL (ошибочный, не работает):

<xsl:template match="text">
    <xsl:choose>
        <xsl:when test="$text_element">
            <xsl:for-each select="/section/page/text/p">
                <xsl:variable name="par" select="." />
                <xsl:if test="position()=1">
                    <xsl:variable name="sump1" select="string-length($par)" />
                </xsl:if>
                <xsl:if test="position()=2">
                    <xsl:variable name="sump2" select="string-length($par)" />
                </xsl:if>
                <xsl:if test="position()=3">
                    <xsl:variable name="sump3" select="string-length($par)" />
                </xsl:if>
                <xsl:if test="position()=4">
                    <xsl:variable name="sump4" select="string-length($par)" />
                </xsl:if>
                <xsl:variable name="sump" select="$sump1 + $sump2 + $sump3 + $sump4" />
                <xsl:if test="$sump &lt; 100">
                    <p><xsl:value-of select="$par" /></p>
                </xsl:if>
            </xsl:for-each>
        </xsl:when>
    </xsl:choose>
</xsl:template>

Для упрощения предположил, что количество строк 4. Но и в этом упрощении - никак не работает. Вижу главную проблему - нельзя изменять значения переменных. Есть ли какой-нибудь способ решить эту задачу?


Ответы (0 шт):