我有一个for-each组,如下所示,但我只想让代码执行,如果for-each-group的结果有多个组...我怎么能这样做?
<xsl:for-each-group select="course[$department = department/@code]" group-by="course_group[@code]">
谢谢!
答案 0 :(得分:2)
你可以简单地使用last():
<xsl:for-each-group select="..." group-by="...">
<xsl:if test="last() gt 1">
...
</xsl:if>
</xsl:for-each-group>
答案 1 :(得分: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>
答案 2 :(得分:1)
使用强>:
<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
第三种选择是使用的最佳和推荐的表达方式。
答案 3 :(得分:0)
这对我有用
<xsl:if test="count(current-group()) > 1">
<xsl:text>Do Something</xsl:text>
</xsl:if>