我的xml就像这样
<syddata lastUpdated="19.04.2013 12:40 ">
<data itemnumber="ln1044-wh-36" variant1="White" variant2="Size 36" variant1group="Farver" variant2group="Størrelser" var1code="wh" var2code="36" estocklevel="0,000000000000" sortering="0"></data>
<data itemnumber="ln1044-wh-38" variant1="White" variant2="Size 38" variant1group="Farver" variant2group="Størrelser" var1code="wh" var2code="38" estocklevel="0,000000000000" sortering="0"></data>
<data itemnumber="ln1044-wh-40" variant1="White" variant2="Size 40" variant1group="Farver" variant2group="Størrelser" var1code="wh" var2code="40" estocklevel="0,000000000000" sortering="0"></data>
<data itemnumber="ln1044-wh-42" variant1="White" variant2="Size 42" variant1group="Farver" variant2group="Størrelser" var1code="wh" var2code="42" estocklevel="0,000000000000" sortering="0"></data>
<data itemnumber="ln1044-wh-44" variant1="White" variant2="Size 44" variant1group="Farver" variant2group="Størrelser" var1code="wh" var2code="44" estocklevel="0,000000000000" sortering="0"></data>
</syddata>
我每个循环都有一个
<xsl:for-each select="$variants/syddata/data">
<xsl:value-of select="@variant1"/>
</xsl:for-each>
将输出白色5次。但我只是想把它放一次。意味着我想得到不同的价值观。有没有办法实现这个目标?
答案 0 :(得分:2)
首先使用第一个data
元素和每个@variant1
属性值,确保没有先前的兄弟元素具有匹配的属性:
<xsl:for-each select="$variants/syddata/data">
<xsl:if test="not(preceding-sibling::data[@variant1 = current()/@variant1])">
<xsl:value-of select="@variant1"/>
</xsl:if>
</xsl:for-each>
答案 1 :(得分:1)
尝试这样的事情:
<xsl:for-each select="data">
<xsl:variable name="variant1" select="@variant1"/>
<xsl:if test="not(following-sibling::data[@variant1= $variant1])">
<xsl:value-of select="@variant1"/>
</xsl:if>
</xsl:for-each>
答案 2 :(得分:1)
如果您需要在XSLT 1.0中获取不同的值,最有效的方法之一是使用xsl:key
。 (Muenchian grouping。)
XSLT 1.0
<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="variant1" match="data" use="@variant1"/>
<xsl:template match="/syddata">
<distinct-values>
<xsl:for-each select="data[count(.|key('variant1',@variant1)[1])=1]">
<value><xsl:value-of select="@variant1"/></value>
</xsl:for-each>
</distinct-values>
</xsl:template>
</xsl:stylesheet>
答案 3 :(得分:0)
当您在输入XML上运行以下转换时,将获得所需的输出
<?xml version='1.0'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each-group select="syddata/data" group-by="@variant1">
<xsl:value-of select="distinct-values(@variant1)"/>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>