question:1140500672 の解答例

<xsl:stylesheet version="1.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text"/>

<xsl:template match="/">
  # 最初の行の計算。
  <xsl:apply-templates select="root/data[1]"/>
</xsl:template>

<xsl:template match="data">
  # これまでの合計をパラメータで受け取る。最初は 0。
  <xsl:param name="x" select="0"/>

  # この行の計算結果を合計する。
  <xsl:variable name="y" select="a * b + $x"/>
  <xsl:if test="not(following-sibling::data[1])">
    # 次の行がない。これで全部なので合計を表示
    <xsl:value-of select="$y"/>
  </xsl:if>

  # 次の行の計算。ここまでの合計 $y をパラメータで渡す。
  <xsl:apply-templates select="following-sibling::data[1]">
    <xsl:with-param name="x" select="$y"/>
  </xsl:apply-templates>
</xsl:template>

</xsl:stylesheet>

# スーパーPRE内で <!-- --> が書けない。。。# の行はコメントということで。