我有一个XML文档(如下所示),我需要做的是获取所有唯一的Type @ID值的列表,无论它们在SizeRanges下面的位置
因此,对于本文档,我需要将10,8,6,5加入到我可以使用的内容中。每个人都可以使用。
最终,我试图将每个SizeRange显示在彼此相邻的表中,并使相同的类型在同一行上排列。但我遇到的问题是提取一个我可以循环的类型的明确列表。
XML文档:
<SizeRanges>
<SizeRange ID="1" Name="8-18">
<Types>
<Type ID="10">
<Size Name="8" Quantity="1" />
<Size Name="10" Quantity="2" />
<Size Name="12" Quantity="2" />
<Size Name="14" Quantity="3" />
<Size Name="16" Quantity="1" />
<Size Name="18" Quantity="1" />
</Type>
<Type ID="8">
<Size Name="8" Quantity="1" />
<Size Name="10" Quantity="1" />
<Size Name="12" Quantity="2" />
<Size Name="14" Quantity="2" />
<Size Name="16" Quantity="1" />
<Size Name="18" Quantity="1" />
</Type>
<Type ID="6">
<Size Name="8" Quantity="1" />
<Size Name="10" Quantity="1" />
<Size Name="12" Quantity="1" />
<Size Name="14" Quantity="1" />
<Size Name="16" Quantity="1" />
<Size Name="18" Quantity="1" />
</Type>
<Type ID="5">
<Size Name="10" Quantity="1" />
<Size Name="12" Quantity="1" />
<Size Name="14" Quantity="1" />
<Size Name="16" Quantity="1" />
<Size Name="18" Quantity="1" />
</Type>
</Types>
</SizeRange>
<SizeRange ID="2" Name="S-XL">
<Types>
<Type ID="10">
<Size Name="S" Quantity="1" />
<Size Name="M" Quantity="3" />
<Size Name="L" Quantity="4" />
<Size Name="XL" Quantity="2" />
</Type>
<Type ID="8">
<Size Name="S" Quantity="1" />
<Size Name="M" Quantity="2" />
<Size Name="L" Quantity="3" />
<Size Name="XL" Quantity="2" />
</Type>
<Type ID="6">
<Size Name="S" Quantity="1" />
<Size Name="M" Quantity="2" />
<Size Name="L" Quantity="2" />
<Size Name="XL" Quantity="1" />
</Type>
<Type ID="5">
<Size Name="S" Quantity="1" />
<Size Name="M" Quantity="1" />
<Size Name="L" Quantity="2" />
<Size Name="XL" Quantity="1" />
</Type>
</Types>
</SizeRange>
</SizeRanges>
答案 0 :(得分:2)
试一试:
<xsl:key name="types" match="Type" use="@ID"/>
<xsl:variable name="distinctTypes" as="xs:integer*" select="distinct-values(//SizeRange/Types/Type)" />
<xsl:template match="/">
<xsl:for-each select="$distinctTypes">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template>
这是另一种方式:
<xsl:key name="types" match="Type" use="@ID"/>
<xsl:template match="/">
<xsl:for-each select="//SizeRange/Types/Type[generate-id() = generate-id(key('types', @ID)[1])]">
<xsl:value-of select="@ID"/>
</xsl:for-each>
</xsl:template>
答案 1 :(得分:1)
在XSLT 2.0上,你可以这样做..
distinct-values(/SizeRanges/SizeRange/Types/Type/@ID)
这会将唯一ID作为输出