2010-08-17 63 views
7

我環顧了網站,但無法找到特定XSL問題的解決方案。如果你認識到這是一個重複的帖子,我表示歉意,並將感謝您指出正確的方向。限制排序的條件xsl:for-每個結果爲n個值

基於下面相對簡單的XML數據集,我想按項目創建一個表,但也限制項目更像'最新'10那樣的'易消化'項目。

+---------------------------------------------------+ 
| Alpha     | Beta     | 
+---------------------------------------------------+ 
| Log_20091014_0900PM.xml | Log_20091015_0900PM.xml | 
| Log_20091013_0900PM.xml | ...      | 
| ...      |       | 
+---------------------------------------------------+ 
| Gamma     | Delta     | 
+---------------------------------------------------+ 
| ...      | ...      | 
+---------------------------------------------------+ 

形式的XML源數據:

<LogResults> 
    <Result> 
    <Project>Alpha</Project> 
    <Data>Log_20091013_0900PM.xml</Data> 
    <Name>Log_20091013_0900PM.xml</Name> 
    </Result> 
    <Result> 
    <Project>Alpha</Project> 
    <Data>Log_20091014_0900PM.xml</Data> 
    <Name>Log_20091014_0900PM.xml</Name> 
    </Result> 
    <Result> 
    <Project>Beta</Project> 
    <Data>Log_20091015_0900PM.xml</Data> 
    <Name>Log_20091015_0900PM.xml</Name> 
    </Result> 
    <Result> 
    <Project>Gamma</Project> 
    <Data>Log_20091016_0900PM.xml</Data> 
    <Name>Log_20091016_0900PM.xml</Name> 
    </Result> 
    <Result> 
    <Project>Delta</Project> 
    <Data>Log_20091019_0900PM.xml</Data> 
    <Name>Log_20091019_0900PM.xml</Name> 
    </Result> 
    <Result> 
    <Project>Delta</Project> 
    <Data>Log_20091020_0900PM.xml</Data> 
    <Name>Log_20091020_0900PM.xml</Name> 
    </Result> 
    ... 
</LogResults> 

我能顯示ALL結果與以下XSL的適當改變每個項目:

<xsl:for-each select="LogResults/Result"> 
    <xsl:sort select="Data" order="descending" /> 
    <xsl:if test="(Project='Alpha')"> 
    <li> 
     <a style="font-size:11pt;"> 
     <xsl:attribute name="href"> 
      Alpha/<xsl:value-of select="Data" /> 
     </xsl:attribute> 
     <xsl:value-of select="Name" /> 
     </a> 
    </li> 
    </xsl:if> 
</xsl:for-each> 

問題:

是否可以將結果限制爲「最新」10(或20 ...)?如果是的話,你會如何建議這樣做?

我試圖以下列方式使用position()例如

<xsl:for-each select="(LogResults/Result) [position &lt; 11]"> 

<xsl:if test="(Project='Alpha')"> 
    <xsl:for-each select=". [position &lt; 11]"> 
    <li> 
     <a style="font-size:11pt;"> 
     <xsl:attribute name="href"> 
      Alpha/<xsl:value-of select="Data" /> 
     </xsl:attribute> 
     <xsl:value-of select="Name" /> 
     </a> 
    </li> 
    </xsl:for-each> 
</xsl:if> 

但到目前爲止,我無法得到它的工作。當然,因爲它現在更多的痕跡和錯誤。

非常感謝您閱讀本文以及任何潛在的建議。 -T

+0

問得好(+1)。查看我的答案以獲得詳細解決方案。 – 2010-08-17 21:34:35

回答

12

您非常接近正確的解決方案。

使用

<xsl:for-each select="LogResults/Result[Project='Alpha']"> 
    <xsl:sort select="Data" order="descending" /> 
    <xsl:if test="not(position() > 10)"> 
    <li> 
     <a style="font-size:11pt;"> 
     <xsl:attribute name="href"> 
      Alpha/<xsl:value-of select="Data" /> 
     </xsl:attribute> 
     <xsl:value-of select="Name" /> 
     </a> 
    </li> 
    </xsl:if> 
</xsl:for-each> 
+0

+1你真棒,我現在看到它。刪除我的答案 – 2010-08-17 21:31:01

+0

太棒了!非常感謝 :) – Tobias 2010-08-18 16:53:40

相關問題