[xsl] xsl:accumulator and temporary trees

Subject: [xsl] xsl:accumulator and temporary trees
From: "Christophe Marchand cmarchand@xxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 12 Feb 2020 14:01:20 -0000

I use an accumulator to calculate height of block elements in a page.

My accumulator is defined like this :

B <xsl:accumulator name="height.counter" as="xs:double" initial-value="0.0">
B B B <xsl:accumulator-rule match="page" select="2.3"/>
B B B <xsl:accumulator-rule match="li1" select="$value + 1.9" phase="end"/>
B B B <xsl:accumulator-rule match="li2" select="$value + 1.8" phase="end"/>
B B B <xsl:accumulator-rule match="li3" select="$value + 1.34" phase="end"/>
B B B <xsl:accumulator-rule match="private:block" select="$value + xs:double(./@height)" phase="end"/>
B </xsl:accumulator>

Modes are defined like this :

B <xsl:mode name="private:acc" on-no-match="shallow-skip" use-accumulators="#all"/>
B <xsl:mode use-accumulators="#all"/>

For a special element, I calculate the block height, and I proceed like this :

B B B  <xsl:variable name="block" as="element(private:block)">
B B B B B  <private:block height="{$height}"/>
B B B  </xsl:variable>
B B B  <xsl:apply-templates mode="private:acc" select="$block"/>

li1, li2 and li3, which are in source tree and processed in default mode do modify accumulator value. But my accumulator is never incremented when a private:block is processed.

Any suggestion will be much appreciated.

Best, and see you at Prague,

Current Thread