2012-11-02 31 views
0

我有一個for-each組,如下所示,但我只希望代碼在每個組的結果都超過1組...我該怎麼做?測試for-each-group是否返回多個組XSL

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

謝謝!

+1

CRISTY,請注意,你接受的答案是不正確。您正在詢問*組的數量*但接受的答案是測試是不同的 - 當前組中的項目數量。 –

回答

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> 
+0

僅供參考:我還沒有玩過XSLT2,所以這是基於我在網上提到的功能的猜測 - 看起來像它有一些有前途的功能。 – JohnLBevan

+0

它的工作,我只是不得不改變> GT,因爲它是我的錯誤!謝謝! – Cristy

+0

不用擔心 - 對不起,&GT是一個錯字 - 意思是> - 但>它也很好,如果它可以工作的話(在VS2010中XSLT1.0比屬性值中的符號更容易被突出顯示爲語法錯誤,所以我默認使用特殊字符代碼)。 – JohnLBevan

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 

這第三個選擇是最好的和推薦的表達使用。

2

您可以簡單地使用最後一個():

<xsl:for-each-group select="..." group-by="..."> 
    <xsl:if test="last() gt 1"> 
    ... 
    </xsl:if> 
</xsl:for-each-group> 
0

這爲我工作

<xsl:if test="count(current-group()) > 1"> 
    <xsl:text>Do Something</xsl:text> 
</xsl:if> 
相關問題