node-list 内のアイテムが兄弟ではない(そして異なるドキュメントに属している可能性さえある)一般的なケースの一般的な解決策を次に示します。
<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="/*">
<xsl:apply-templates select="Items/Item1">
<xsl:with-param name="pNodeList" select="Items/Item1"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Item1">
<xsl:param name="pNodeList"/>
<xsl:variable name="vPos" select="position()"/>
<xsl:copy-of select="self::node()[not(. = $pNodeList[$vPos -1])]"/>
</xsl:template>
</xsl:stylesheet>
この変換が提供された XML ドキュメントに適用されると、次のようになります。
<t>
<Items>
<Item1>24</Item1>
</Items>
<Items>
<Item1>25</Item1>
</Items>
<Items>
<Item1>25</Item1>
</Items>
</t>
必要な (想定される) 正しい結果が生成されます。
<Item1>24</Item1>
<Item1>25</Item1>