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>
我有一个 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>