Если вы хотите получить уникальные атрибуты 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>
Обратите внимание, если выможно обновить до XSLT 2.0, тогда вы можете использовать xsl:for-each-group
, например,
<xsl:for-each-group select=".//@value" group-by=".">
, или вы можете использовать distinct-values()
, например,
<xsl:for-each select="distinct-values(.//@value)">
.