如果你想得到独一无二的
value
属性(按产品),您必须引用密钥的产品部分
<xsl:key name="values" match="@value" use="concat(generate-id(ancestor::Product), '|', .)" />
然后,对于一个给定的产品,您可以得到这样独特的值(其中
$id
是包含产品的generate-id()值的变量)
<xsl:for-each select=".//@value[generate-id() = generate-id(key('values', concat($id, '|', .))[1])]">
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="values" match="@value" use="concat(generate-id(ancestor::Product), '|', .)" />
<xsl:template match="Product">
<xsl:variable name="id" select="generate-id()" />
<xsl:copy>
<xsl:for-each select=".//@value[generate-id() = generate-id(key('values', concat($id, '|', .))[1])]">
<values><xsl:value-of select="." /></values>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
注意,如果您可以升级到XSLT2.0,那么您可以使用
xsl:for-each-group
就像这样
<xsl:for-each-group select=".//@value" group-by=".">
或者你可以用
distinct-values()
就像这样
<xsl:for-each select="distinct-values(.//@value)">