使用 XSLT 删除两条重复记录

Remove both duplicate records using XSLT

我正在尝试删除 XML

中的两条重复记录

我已经可以删除第二个记录,但在这种情况下我需要删除这两个记录。

这是我拥有的 XSLT 映射

  <?xml version="1.0" encoding="UTF-8"?>
  <xsl:transform version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="item">
  <xsl:copy-of select="." />
  </xsl:template>
  <xsl:template match="/ZTABLE/Record">
  <ZTABLE>
  <Record>
  <xsl:apply-templates select="item[not(ID=preceding-sibling::item/ID)]" />
  </Record>
  </ZTABLE>
  </xsl:template>
  </xsl:transform>

输入XML是:

  <ZTABLE>
  <Record>
  <item>
  <ID>400400</ID>
  </item>
  <item>
  <ID>100100</ID>
  </item>
  <item>
  <ID>200200</ID>
  </item>
  <item>
  <ID>300300</ID>
  </item>
  <item>
  <ID>400400</ID>
  </item>
  </Record>
  </ZTABLE>

预期输出是

 <ZTABLE>
 <Record>
 <item>
 <ID>100100</ID>
 </item>
 <item>
 <ID>200200</ID>
 </item>
 <item>
 <ID>300300</ID>
 </Record>
 </ZTABLE>

这样试试:

<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="item" match="item" use="ID" />

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="item[count(key('item', ID)) > 1]"/>

</xsl:stylesheet>

有关解释,请阅读 Muenchian grouping.