下面是一個XSLT 1.0選項...
XSLT 1.0 stylsheet
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kPayloads" match="payload" use="concat('N',name,'D',date)"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="payloads">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="payload[generate-id() = generate-id(key('kPayloads', concat('N',name,'D',date)))]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML輸入(合格的)
<payloads>
<payload>
<name>1</name>
<date>2</date>
</payload>
<payload>
<name>1</name>
<date>2</date>
</payload>
<payload>
<name>10</name>
<date>20</date>
</payload>
<payload>
<name>1</name>
<date>2</date>
</payload>
</payloads>
XML輸出
<payloads>
<payload>
<name>1</name>
<date>2</date>
</payload>
<payload>
<name>10</name>
<date>20</date>
</payload>
</payloads>
編輯
這XSLT 2.0樣式表也會產生相同的輸出...
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="payloads">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:for-each-group select="payload" group-by="concat('N',name,'D',date)">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案是肯定的,但除此之外,它取決於是否您正在使用XSLT 1.0或2.0。 Google針對「XSLT分組」(或者更好,請在您最喜愛的XSLT教科書後面的索引中查找),並且您會發現大量信息。 – 2012-03-06 18:40:27