Поскольку вы используете правило идентификации, полезно знать, как его переопределить для достижения максимальной гибкости :
0,1. Переопределение, которое исключает элемент, но обрабатывает все узлы в его поддереве:
<xsl:template match="root">
<xsl:apply-templates/>
</xsl:template>
0,2. Переопределить для элемента, который исключает его и любой узел из его поддерева:
<xsl:template match="event[position() > 1]"/>
Эти два вместе дают нам полное требуемое преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="event[position() > 1]"/>
</xsl:stylesheet>
когда это преобразование применяется к следующему документу XML :
<root>
<event>bla1</event>
<event>bla2</event>
</root>
желаемый, правильный результат выдается :
<event>bla1</event>