Вы можете использовать метод Meunchian для группировки, создав xsl:key
для элементов Passenger
, используя значения из атрибутов @FirstNameNumber
и @LastNameNumber
для построения значения поиска ключа, итерациянад каждым из элементов Passenger
и скопируйте элемент, если он является первым элементом, полученным из xsl:key
для этого значения ключа группировки.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:out2="out2">
<xsl:output indent="yes"/>
<xsl:key name="passengers-by-num" match="Passenger" use="concat(@FirstNameNumber,@LastNameNumber)"/>
<xsl:template match="out2:PrintRequest">
<xsl:copy>
<xsl:for-each select="Passenger[generate-id() = generate-id(key('passengers-by-num', concat(@FirstNameNumber,@LastNameNumber)[1]))]">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Если вы можете использовать XSLT 2.0 (или 3.0), тогда это будет немного проще.Вы можете использовать xsl: for-each-group :
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:out2="out2">
<xsl:output indent="yes"/>
<xsl:template match="out2:PrintRequest">
<xsl:copy>
<xsl:for-each-group select="Passenger" group-by="concat(@FirstNameNumber,@LastNameNumber)">
<xsl:copy-of select="."/>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>