[xsl] Are xsl:accumulator-rules exclusive ?

Subject: [xsl] Are xsl:accumulator-rules exclusive ?
From: "Christophe Marchand cmarchand@xxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 21 Sep 2020 21:52:02 -0000

I didn't manage to find the response in the specs, so...

Are xsl:accumulator-rule mutually exclusives, and do default priorities for template rules apply in accumulator-rule ? Is the same node able to fire many xsl:accumulator-rule in the same mode, if evaluated only once ?

For example, if I have this accumulator :

B <xsl:accumulator name="weight" as="xs:integer" initial-value="0">
B B B <xsl:accumulator-rule match="box[xs:integer(@width) gt 100][xs:integer(@height) gt 100]" select="$value + 100"/>
B B B <xsl:accumulator-rule match="box[xs:integer(@width) gt 50][xs:integer(@height) gt 50]" select="$value + 50"/>
B B B <xsl:accumulator-rule match="box" select="$value + 1"/>
B </xsl:accumulator>
B <xsl:mode use-accumulators="#all" on-no-match="shallow-copy"/>

B  <xsl:template name="xsl:initial-template">
B B B  <xsl:variable name="content" as="element(box)*">
B B B B B  <box width="150" height="150"/>
B B B  </xsl:variable>
B B B  <xsl:apply-templates select="$content"/>
B  </xsl:template>

I'd expect to get <box width="150" height="150">100</box> but I get <box width="150" height="150">1</box>.

Is it normal ?

Should I put a xsl:choose in the rule match="box" and evaluate all possibilities inside the choose ?

Best regards,

Current Thread