Bug #5190
closedxsl:iterate problem where the name of an xsl:iterate parameter duplicates the name of a local variable
100%
Description
I was experimenting with xsl:iterate
and found that the code
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
expand-text="yes">
<xsl:output method="xml" indent="yes"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="table">
<xsl:copy>
<xsl:iterate select="row">
<xsl:param name="row" as="element(row)?" select="()"/>
<xsl:on-completion select="$row"/>
<xsl:variable name="row" as="element(row)">
<xsl:apply-templates select="."/>
</xsl:variable>
<xsl:copy-of select="$row"/>
<xsl:next-iteration>
<xsl:with-param name="row" select="$row"/>
</xsl:next-iteration>
</xsl:iterate>
</xsl:copy>
</xsl:template>
<xsl:template match="/" name="xsl:initial-template">
<xsl:next-match/>
<xsl:comment xmlns:saxon="http://saxon.sf.net/">Run with {system-property('xsl:product-name')} {system-property('xsl:product-version')} {system-property('Q{http://saxon.sf.net/}platform')}</xsl:comment>
</xsl:template>
</xsl:stylesheet>
when run with xslt3
from Saxon-JS 2.3 against a sample like
<table>
<row>row 1</row>
<row>row 2</row>
<row>row 3</row>
</table>
outputs "only" three rows
<?xml version="1.0" encoding="UTF-8"?>
<table>
<row>row 1</row>
<row>row 2</row>
<row>row 3</row>
</table>
<!--Run with Saxon-JS 2.3 Node.js-->
while Saxon HE Java 10.6 outputs the third row two times
<?xml version="1.0" encoding="UTF-8"?>
<table>
<row>row 1</row>
<row>row 2</row>
<row>row 3</row>
<row>row 3</row>
</table>
<!--Run with SAXON HE 10.6 -->
as does SaxonCS.
The spec for xsl:iterate
https://www.w3.org/TR/xslt-30/#iterate states that "The result of the xsl:iterate instruction is the concatenation of the sequences that result from the repeated evaluation of the contained sequence constructor, followed by the sequence that results from evaluating the xsl:break or xsl:on-completion element if any" so I think Saxon-JS has a bug here, failing to output the on-completion
result.
Please register to edit this issue
Also available in: Atom PDF Tracking page