Re: [xsl] [Accumulators] Another stupid question

Subject: Re: [xsl] [Accumulators] Another stupid question
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 7 Oct 2020 07:45:42 -0000
Am 07.10.2020 um 00:50 schrieb Martin Honnen martin.honnen@xxxxxx:

Now I wonder whether nevertheless the sample shows that the accumulator
wrongly did not fire for the parentless element.

A shorter test case is


<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; exclude-result-prefixes="#all" version="3.0">

   <xsl:accumulator name="a1" as="xs:string" initial-value="'init'">
       <xsl:accumulator-rule match="foo" select="$value || ', matched '
|| path()"/>
   </xsl:accumulator>

   <xsl:param name="p1">
       <foo/>
   </xsl:param>

   <xsl:param name="p2" as="element(foo)">
       <foo/>
   </xsl:param>

   <xsl:template name="xsl:initial-template">
       <xsl:apply-templates select="$p1/node(), $p2"/>
   </xsl:template>

   <xsl:template match="foo">
       <foo-processed accumulator-value="{accumulator-before('a1')}"
root="{node-name(root())}"/>
   </xsl:template>

</xsl:stylesheet>

when run with Saxon 10.2 HE with option -it it outputs

<?xml version="1.0" encoding="UTF-8"?><foo-processed
accumulator-value="init, matched /Q{}foo[1]" root=""/><foo-processed
accumulator-value="init" root="foo"/>

Shouldn't the rule for `foo` elements be applied as well to the
parentless `foo` and therefore it should have an accumulator-before
value different from the "init" initial value?

Saxon-JS 2 gives


<?xml version="1.0" encoding="UTF-8"?><foo-processed
accumulator-value="init, matched /Q{}foo[1]" root=""/><foo-processed
accumulator-value="init, matched /Q{}foo[1]" root="foo"/>


so there the parentless foo is matched by the accumulator (although I am not sure the value returned by "path()" is the right one for a parentless node).

Current Thread