xsl-list
[Top] [All Lists]

Re: [xsl] xsl:accumulator and temporary trees

2020-02-13 01:36:57
Thanks Martin. Just few things to refactor, then.

See you,
Christophe

Le 12/02/2020 à 15:08, Martin Honnen martin(_dot_)honnen(_at_)gmx(_dot_)de a 
écrit :
Am 12.02.2020 um 15:01 schrieb Christophe Marchand 
cmarchand(_at_)oxiane(_dot_)com:
Hello,

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

My accumulator is defined like this :

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

Modes are defined like this :

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

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

    <xsl:variable name="block" as="element(private:block)">
      <private:block height="{$height}"/>
    </xsl:variable>
    <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.



Accumulators, like keys, work on a tree, if you have some nodes in one
tree and the temporarily created element that is obviously in a
different tree then the accumulators of the temporarily created tree are
computed independently of the input tree.

I think you need to push the input through a mode that adds the
private:block elements and then you need to push that complete,
temporarily created tree through a new mode where you want to use the
accumulator.

--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>