I'm using xdmp:xslt-invoke()
to transform documents in Marklogic. That works fine but today I faced a problem with using <xsl:for-each-group select="..." group-starting-with="...">
(while using group-adjacent
works as expected in other parts of my XSLT)
XML Input
<DOC>
<AL>
<TABLEAU FILET="1" FRAME="ALL" ID="L90F6543EAA5E12-EFL">
<TGROUP COLS="2">
<COLSPEC COLNAME="COL1" COLNUM="1"/>
<COLSPEC COLNAME="COL2" COLNUM="2"/>
<TBODY>
<ROW>
<ENTRY ALIGN="CENTER" COLNAME="COL1" COLSEP="1" ROWSEP="1" VALIGN="TOP">
<AL>
<MOTREP>Éléments à inclure dans l'assiette</MOTREP>
</AL>
</ENTRY>
<ENTRY ALIGN="CENTER" COLNAME="COL2" COLSEP="1" ROWSEP="1" VALIGN="TOP">
<AL>
<MOTREP>Éléments exclus de l'assiette</MOTREP>
</AL>
</ENTRY>
</ROW>
</TBODY>
</TGROUP>
</TABLEAU>
</AL>
</DOC>
XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="2.0">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="AL">
<xsl:variable name="self" as="element()" select="."/>
<xsl:for-each-group select="node()" group-starting-with="LST | TABLEAU">
<xsl:choose>
<xsl:when test="local-name(current-group()[1]) = ('LST', 'TABLEAU')">
<xsl:apply-templates select="current-group()" mode="#current"/>
</xsl:when>
<xsl:otherwise>
<AL>
<xsl:apply-templates select="current-group()" mode="#current"/>
</AL>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML output with Saxon HE 9.8.0.12
<DOC>
<AL>
</AL><TABLEAU FILET="1" FRAME="ALL" ID="L90F6543EAA5E12-EFL">
<TGROUP COLS="2">
<COLSPEC COLNAME="COL1" COLNUM="1"/>
<COLSPEC COLNAME="COL2" COLNUM="2"/>
<TBODY>
<ROW>
<ENTRY ALIGN="CENTER" COLNAME="COL1" COLSEP="1" ROWSEP="1" VALIGN="TOP">
<AL>
<MOTREP>Éléments à inclure dans l'assiette</MOTREP>
</AL>
</ENTRY>
<ENTRY ALIGN="CENTER" COLNAME="COL2" COLSEP="1" ROWSEP="1" VALIGN="TOP">
<AL>
<MOTREP>Éléments exclus de l'assiette</MOTREP>
</AL>
</ENTRY>
</ROW>
</TBODY>
</TGROUP>
</TABLEAU>
</DOC>
XML output with Marklogic 10.0-3 XSLT Processor
<DOC>
<TABLEAU FRAME="ALL" ID="L90F6543EAA5E12-EFL">
<TGROUP COLS="2">
<TBODY>
<ROW>
<ENTRY ALIGN="CENTER" COLNAME="COL1" COLSEP="1" ROWSEP="1" VALIGN="TOP">
<TABLEAU FRAME="ALL" ID="L90F6543EAA5E12-EFL">
<TGROUP COLS="2">
<TBODY>
<ROW>
<ENTRY ALIGN="CENTER" COLNAME="COL1" COLSEP="1" ROWSEP="1" VALIGN="TOP">
<AL xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<MOTREP>Éléments à inclure dans l'assiette test1</MOTREP>
</AL>
</ENTRY>
<ENTRY ALIGN="CENTER" COLNAME="COL2" COLSEP="1" ROWSEP="1" VALIGN="TOP">
<AL xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<MOTREP>Éléments exclus de l'assiette</MOTREP>
</AL>
</ENTRY>
</ROW>
</TBODY>
</TGROUP>
</TABLEAU>
</ENTRY>
<ENTRY ALIGN="CENTER" COLNAME="COL2" COLSEP="1" ROWSEP="1" VALIGN="TOP">
<TABLEAU FRAME="ALL" ID="L90F6543EAA5E12-EFL">
<TGROUP COLS="2">
<TBODY>
<ROW>
<ENTRY ALIGN="CENTER" COLNAME="COL1" COLSEP="1" ROWSEP="1" VALIGN="TOP">
<AL xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<MOTREP>Éléments à inclure dans l'assiette test1</MOTREP>
</AL>
</ENTRY>
<ENTRY ALIGN="CENTER" COLNAME="COL2" COLSEP="1" ROWSEP="1" VALIGN="TOP">
<AL xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<MOTREP>Éléments exclus de l'assiette</MOTREP>
</AL>
</ENTRY>
</ROW>
</TBODY>
</TGROUP>
</TABLEAU>
</ENTRY>
</ROW>
</TBODY>
</TGROUP>
</TABLEAU>
</DOC>
It's really strange to get nested TABLEAU elements in Marklogic output, which duplicates the ENTRY content.
It looks like a bug or am I missing something?