XSLT 检查整个重复值 XML

XSLT Checking duplicate values in whole XML

我有一个 XML 这样的:

<items>
 <item>
  <attribute>1</attribute>
 </item>
 <item>
  <attribute>2</attribute>
 </item>
 <item>
  <attribute>3</attribute>
 </item>
 <item>
  <attribute>2</attribute>
 </item>
 <item>
  <attribute>1</attribute>
 </item>
 <item>
  <attribute>1</attribute>
 </item>
 <item>
  <attribute>4</attribute>
 </item>
</items>

我需要一个 XSLT 来生成此输出:

<items>
 <item>
  <attribute>1</attribute>
 </item>
 <item>
  <attribute>2</attribute>
 </item>
 <item>
  <attribute></attribute>
 </item>
 <item>
  <attribute>2</attribute>
 </item>
 <item>
  <attribute>1</attribute>
 </item>
 <item>
  <attribute>1</attribute>
 </item>
 <item>
  <attribute></attribute>
 </item>
</items>

基本上我希望 XSLT 仅在整个文件中至少出现两次时才显示值。我只能用 XSLT 1.0 做到这一点,这可能吗?

您可以通过以下方式获得问题中显示的输出:

XSLT 1.0

<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="att" match="attribute" use="." />

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

<xsl:template match="attribute[count(key('att', .)) = 1]">
    <xsl:copy/>
</xsl:template>

</xsl:stylesheet>