我一直在震撼我的大脑,但仍然没有看到它。
既然我已经能够隔离下面xml示例的Brands,现在我想要隔离给定$ Brand的所有Product-Type,就像我能够隔离所有品牌一样
xml示例(许多产品的一个成员)......
<Product>
<Brand>Brand</Brand>
<Type>Product Type (Category)</Type>
...
</Product>
这是我能够提出的xsl。我认为我的错误在xsl:key ...
的xPath表达式中<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="Brand" select="Brand"/>
<xsl:output method="html" encoding="utf-8"/>
<xsl:key name="kProdByType"
match="Products/Product/Brand[. = $Brand]" use="../Type"/>
<xsl:template match="Products">
<xsl:for-each
select="Product[generate-id() =
generate-id(key('kProdByType', Type)[1])]
"><xsl:sort select="Type" /><xsl:value-of
select="Type" />|</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
再次感谢!
答案 0 :(得分:1)
现在您按Brand
和Type
进行分组。关键必须是:
<xsl:key name="kProdByBrandAndType"
match="Product" use="concat(Brand,'+++',Type)"/>
现在,分组:
<xsl:for-each
select="Product[generate-id() =
generate-id(key('kProdByBrandAndType',
concat($Brand,'+++',Type))[1])]">
在模式中使用变量/参数应该是错误的,但我认为至少MSXSL不会在密钥中抱怨它。 为安全起见,请勿使用:
<xsl:key name="kProdByType" match="Product[Brand=$Brand]" use="Type"/>