0

以下のようなfor-eachグループがありますが、そのfor-each-groupの結果に複数のグループがある場合にのみコードを実行したいのですが...どうすればよいですか?

<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: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 に答える
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ます。

2つ目<xsl:for-each-group>は条件が追加されており、シーケンスに少なくとも2つの項目が含まれて[$vGroups[2]]いる場合にのみ、任意のグループを選択(および実行)します。$vGroups

または、次を使用することもできます

exists(distinct-values(course[$department = department/@code]/course_group[@code])[2])

あるいは、(なぜ私がこれを忘れたのか)Michael Kayの回答で指摘されているように、次のように簡単に使用できます。

last() gt 1

この3番目の選択肢は、使用するのに最適で推奨される式です。

于 2012-11-03T04:05:16.313 に答える
0

これは私のために働いた

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