2010-08-17 6 views
7

Ich schaute auf der Website, aber war nicht in der Lage, eine Lösung für ein bestimmtes XSL-Problem zu finden. Wenn Sie dies als ein Duplikat Post erkennen, entschuldige ich mich und wäre dankbar, in die richtige Richtung gezeigt zu werden.Limit sortierte bedingte xsl: for-each Ergebnisse zu n Werten

Basierend auf dem relativ einfachen XML-Datensatz unten möchte ich eine Tabelle nach Projekt erstellen, aber auch die Einträge auf etwas "verdaulicheres" wie die "neueste" 10 für das Projekt beschränken.

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

XML-Quelldaten der Form:

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

Ich bin in der Lage ALLE Ergebnisse für jedes Projekt mit dem entsprechenden Variationen der folgenden XSL zu zeigen:

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

Frage :

Ist es möglich, die Ergebnisse auf die "neuesten" 10 (oder 20 ...) zu beschränken? Und wenn ja, wie würden Sie das vorschlagen?

Ich versuchte

zum Beispiel position() in der folgenden Art und Weise zu verwenden
<xsl:for-each select="(LogResults/Result) [position &lt; 11]"> 

oder

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

Aber bisher konnte ich nicht es an der Arbeit. Sicher, weil es im Moment mehr Trail and Error ist.

Vielen Dank für das Lesen dieses und alle möglichen Ratschläge. -T

+0

Gute Frage (+1). Siehe meine Antwort für eine detaillierte Lösung. –

Antwort

12

Sie sind ziemlich nah an der richtigen Lösung.

Verwendung:

<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 Du warst richtig, ich sehe es jetzt. Löschen meiner Antwort –

+0

Awesome! Danke vielmals :) – Tobias

Verwandte Themen