. , XSLT 2.0 1.0.
2.0, <xsl:for-each-group>:
<table>
<xsl:for-each-group select="LINE_INFO" group-starting-with="LINE_INFO[ITEM_ID]">
XPath select group-starting-with , node LINE_INFO. // , .
, :
<tr>
<td><xsl:value-of select="current-group()/ITEM_ID" /></td>
<td>
<xsl:value-of "concat(current-group()/DESC, current-group()/EXT_DESC)"/>
<br />
<xsl:value-of "concat(current-group()/LINE_NOTE)" />
<br />
<xsl:value-of "concat(current-group()/NOTE)" />
</td>
<td><xsl:value-of select="current-group()/QTY" /></td>
<td><xsl:value-of select="current-group()/ADDTL_NOTE_DETAIL/NOTE" /></td>
</tr>
</xsl:for-each-group>
</table>
( , OP XSLT 2.0.)
1.0, Muenchian grouping. - ( 1) ,
<xsl:key name="LINE_INFO-by-section" match="LINE_INFO"
use="generate-id((. | preceding-sibling::LINE_INFO)[ITEM_ID][last()])" />
:
<xsl:for-each select="LINE_INFO[ITEM_ID]">
<xsl:copy>
:
<xsl:variable name="section-starter-id" select="generate-id(.)" />
<xsl:for-each select="key('LINE_INFO-by-section', $section-starter-id))">
<xsl:copy-of select="node()|@*" />
</xsl:for-each>
</xsl:copy>
</xsl:for-each>
(.)