以下のようなfor-eachグループがありますが、そのfor-each-groupの結果に複数のグループがある場合にのみコードを実行したいのですが...どうすればよいですか?
<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: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: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番目の選択肢は、使用するのに最適で推奨される式です。
これは私のために働いた
<xsl:if test="count(current-group()) > 1">
<xsl:text>Do Something</xsl:text>
</xsl:if>