我有一个如下所示的 for-each 组,但我只希望在 for-each-group 的结果超过 1 个组的情况下执行代码......我该怎么做?
<xsl:for-each-group select="course[$department = department/@code]" group-by="course_group[@code]">
谢谢!
您可以简单地使用 last():
<xsl:for-each-group select="..." group-by="...">
<xsl:if test="last() gt 1">
...
</xsl:if>
</xsl:for-each-group>
使用:
<xsl:variable name="vGroups" as="item()*">
<xsl:for-each-group select=
"course[$department = department/@code]" group-by="course_group[@code]"
>1</xsl:for-each-group>
</xsl:variable>
<xsl:for-each-group select=
"course[$vGroups[2]][$department = department/@code]" group-by="course_group[@code]">
<!-- Your desired processing here -->
</xsl:for-each-group>
因此,第<xsl:for-each-group>
一个为每个组生成一个项目,并将其捕获在$vGroups
变量中。
第二个<xsl:for-each-group>
具有添加的条件,并且仅当序列包含至少两个项目时[$vGroups[2]]
才会选择任何组(并执行) 。$vGroups
或者,可以使用:
exists(distinct-values(course[$department = department/@code]/course_group[@code])[2])
或者,(为什么我忘记了这一点)正如迈克尔凯的回答所指出的那样,可以简单地使用:
last() gt 1
这第三种选择是最好的和推荐使用的表达方式。
尝试:
<xsl:for-each-group select="course[$department = department/@code]" group-by="course_group[@code]">
<xsl:if test="count(current-group()) > 1">
<xsl:text>Do Something</xsl:text>
</xsl:if>
</xsl:for-each-group>
这对我有用
<xsl:if test="count(current-group()) > 1">
<xsl:text>Do Something</xsl:text>
</xsl:if>