XSLT检查整个XML中的重复值

问题描述 投票:0回答:1

我有这样的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做到这一点,可以吗?

xml xslt xslt-1.0
1个回答
1
投票

您可以使用以下方法获得问题中显示的输出:

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>
© www.soinside.com 2019 - 2024. All rights reserved.