鉴于此 XML,我需要显示单个类别中的项目,并在组标题下分组。不应显示空组(例如,当类别等于 x 时,不应显示组 C 的标题,类别 z 和组 A 和 B 相同)。
<group name="A">
<item name="A1" category="x"/>
<item name="A2" category="x"/>
<item name="A3" category="y"/>
</group>
<group name="B">
<item name="B1" category="x"/>
</group>
<group name="C">
<item name="C1" category="y"/>
<item name="C2" category="z"/>
</group>
因为我无法显示空组,所以我已经将项目过滤到 $items 中。我将此集合作为参数传递给呈现分组的模板(见下文)。在这个模板中,对于每个分组,我需要调用一个模板来呈现当前组中的项目。
<xsl:template name="groups">
<!-- This is already filtered by category -->
<xsl:param name="items" />
<!-- Select only the groups that should be displayed -->
<xsl:for-each select="$items/parent::group">
<h1><xsl:value-of select="./@name"/></h1>
<!-- Display all filtered items in this group -->
<div class="items">
<xsl:call-template name="items">
<!-- How can I get the items from $items for the current group? -->
<xsl:with-param name="partners" select="$items..."/>
</xsl:call-template>
</div>
</xsl:for-each>
</xsl:template>
我为param
传递给items
模板的内容选择什么?
显示所有项目的模板:
<xsl:template name="items">
<xsl:param name="items" />
<xsl:for-each select=".">
<div class="item">
<xsl:value-of select="./@name" />
</div>
</xsl:for-each>
</xsl:template>
过滤类别 z 后的最终结果应该是:
<h1>C</h1>
<div class="items">
<div class="item">C2</div>
</div>