xsl模板 - xslt template



將已排序的條件xsl:for-each結果限制為n個值 (1)

我環顧四周,但無法找到一個特定的XSL問題的解決方案。 如果你認識到這是一個重複的帖子,我表示歉意,並將感謝指出正確的方向。

基於下面相對簡單的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>

我可以通過以下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


你很接近正確的解決方案。

用途

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




xslt