我有一個for-each組,如下所示,但我只希望代碼在每個組的結果都超過1組...我該怎麼做?測試for-each-group是否返回多個組XSL
<xsl:for-each-group select="course[$department = department/@code]" group-by="course_group[@code]">
謝謝!
我有一個for-each組,如下所示,但我只希望代碼在每個組的結果都超過1組...我該怎麼做?測試for-each-group是否返回多個組XSL
<xsl:for-each-group select="course[$department = department/@code]" group-by="course_group[@code]">
謝謝!
嘗試:
<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>
僅供參考:我還沒有玩過XSLT2,所以這是基於我在網上提到的功能的猜測 - 看起來像它有一些有前途的功能。 – JohnLBevan
它的工作,我只是不得不改變> GT,因爲它是我的錯誤!謝謝! – Cristy
不用擔心 - 對不起,&GT是一個錯字 - 意思是> - 但>它也很好,如果它可以工作的話(在VS2010中XSLT1.0比屬性值中的符號更容易被突出顯示爲語法錯誤,所以我默認使用特殊字符代碼)。 – JohnLBevan
使用:
<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="..." group-by="...">
<xsl:if test="last() gt 1">
...
</xsl:if>
</xsl:for-each-group>
這爲我工作
<xsl:if test="count(current-group()) > 1">
<xsl:text>Do Something</xsl:text>
</xsl:if>
CRISTY,請注意,你接受的答案是不正確。您正在詢問*組的數量*但接受的答案是測試是不同的 - 當前組中的項目數量。 –