0

我有一个如下所示的 for-each 组,但我只希望在 for-each-group 的结果超过 1 个组的情况下执行代码......我该怎么做?

<xsl:for-each-group select="course[$department = department/@code]" group-by="course_group[@code]">

谢谢!

4

4 回答 4

2

您可以简单地使用 last():

<xsl:for-each-group select="..." group-by="...">
  <xsl:if test="last() gt 1">
    ...
  </xsl:if>
</xsl:for-each-group>
于 2012-11-03T09:50:04.480 回答
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

这第三种选择是最好的和推荐使用的表达方式。

于 2012-11-03T04:05:16.313 回答
1

尝试:

<xsl:for-each-group select="course[$department = department/@code]" group-by="course_group[@code]">
  <xsl:if test="count(current-group()) &gt; 1">
    <xsl:text>Do Something</xsl:text>
  </xsl:if>
</xsl:for-each-group>
于 2012-11-02T19:40:09.900 回答
0

这对我有用

<xsl:if test="count(current-group()) > 1">
    <xsl:text>Do Something</xsl:text>
</xsl:if>
于 2012-11-06T06:19:31.740 回答