2 つの<NodeE>
要素が同じ親を持つ場合にのみ重複と見なされる場合、これがおそらく最も簡単な解決策です。
入力
<?xml version="1.0"?>
<NodeA NodeAattr="123">
<NodeB NodeBattr="456"></NodeB>
<NodeC>
<NodeD Name="ValueD">
<NodeE Name="ValueABC">
<NodeF Value="0"></NodeF>
</NodeE>
<NodeE Name="ValueABC">
<NodeF Value="0"></NodeF>
</NodeE>
</NodeD>
<!-- Added another <NodeD> element for demonstration -->
<NodeD>
<NodeE Name="ValueABC">
<NodeF Value="0"></NodeF>
</NodeE>
<NodeE Name="ValueDEF">
<NodeF Value="0"></NodeF>
</NodeE>
</NodeD>
</NodeC>
</NodeA>
スタイルシート #1
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!--
Identity transform: copy elements and attributes from input file as is
-->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!--
Drop <NodeE> elements with a preceding <NodeE> sibling that has the same
@Name attribute value as the current element
-->
<xsl:template
match="NodeE[preceding-sibling::NodeE[@Name = current()/@Name]]"/>
</xsl:stylesheet>
出力 #1
<?xml version="1.0" encoding="utf-8"?>
<NodeA NodeAattr="123">
<NodeB NodeBattr="456"/>
<NodeC>
<NodeD Name="ValueD">
<NodeE Name="ValueABC">
<NodeF Value="0"/>
</NodeE>
</NodeD>
<NodeD>
<NodeE Name="ValueABC">
<NodeF Value="0"/>
</NodeE>
<NodeE Name="ValueDEF">
<NodeF Value="0"/>
</NodeE>
</NodeD>
</NodeC>
</NodeA>
一方、<NodeE>
ドキュメント全体で要素が重複していると見なす必要がある場合は、Muenchian グループ化を使用できます。
スタイルシート #2
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kNode" match="NodeE" use="@Name"/>
<!--
Identity transform: copy elements and attributes from input file as is
-->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!--
Use Muenchian grouping to apply unique NodeE elements.
See http://www.jenitennison.com/xslt/grouping/muenchian.html
-->
<xsl:template match="NodeE[generate-id() =
generate-id(key('kNode', @Name)[1])]">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- Drop other <NodeE> elements -->
<xsl:template match="NodeE"/>
</xsl:stylesheet>
出力 #2
<?xml version="1.0" encoding="utf-8"?>
<NodeA NodeAattr="123">
<NodeB NodeBattr="456"/>
<NodeC>
<NodeD Name="ValueD">
<NodeE Name="ValueABC">
<NodeF Value="0"/>
</NodeE>
</NodeD>
<NodeD>
<NodeE Name="ValueDEF">
<NodeF Value="0"/>
</NodeE>
</NodeD>
</NodeC>
</NodeA>