Announcement

Collapse
No announcement yet.

Die letzten X Elemente ausgeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Die letzten X Elemente ausgeben

    Hallo,

    bin grade frisch im Thema XSLT und stehe vor einem Problem. Ich habe eine XML Datei von der ich die letzten 5 Einträge auslesen möchte.

    Derzeit sieht der Select so aus:

    <xsl:for-each select="autoren/autor[position() &lt; 6]">
    <xsl:sort select="@datetime" order="descending" />

    Problem ist hier, das zwar nur 5 Beiträge ausgelesen werden, jedoch nur die erste 5 aus der Datei. Da bringt das Sortieren dann auch nichts.

    Wie bekomm ich es hin, das die letzten 5 Elemente am Ende der Datei ausgelesen werden?

    Vielen dank!

  • #2
    Es werden die ersten 5 gewählt und diese dann sortiert. Offenbar sollen alle sortiert und dann die aktuellsten 5 ausgegeben werden. Verwende in diesem Fall folgende Variante:

    Code:
    <xsl:for-each select="autoren/autor">
      <xsl:sort select="@datetime" order="descending" data-type="number"/>
      <xsl:if test="position() &lt; 6">
        <!-- weitere Abfragen -->
      </xsl:if>
    </xsl:for-each>
    Zuletzt editiert von Thomas Meinike; 20.02.2008, 11:38.

    Comment


    • #3
      Hallo,

      erstmal vielen Dank für die Antwort.

      Richtig, theoretisch müsste ich alle Einträge einmal absteigend sortieren und erst dann die ersten 5 Einträge der Datei auslesen.
      Ich habe den Code noch nicht getestet, jedoch habe ich noch eine Frage zum Verständnis. Undzwar wie das mit dieser Bedingung genau funktionieren soll. Man fragt ab ob "test" < 6 ist. Woher hole ich test? Also woher bekommt der Wert damit die Bedingung auch erfüllt werden kann.

      Vielen dank.

      Comment


      • #4
        Das test-Attribut gehört zu xsl:if bzw. xsl:when. Es wird jeweils geprüft, ob die im Attribut definierte Bedingung den Wahrheitswert true liefert (im genannten Beispiel also die Prüfung der Positionsnummer).

        <xsl:if test="bedingung">...</xsl:if> entspricht if(bedingung) in anderen Sprachen, während xsl:when im Kontext von xsl:choose und xsltherwise die bekannten Konstruke if - else if - else abdeckt, dann in dieser Form:

        <xsl:choose>
        <xsl:when test="bedingung">...</xsl:when>
        <!-- 0 bis n weitere xsl:when-Zweige im Sinne von else if -->
        <xsltherwise>...</xsltherwise><!-- hier kein test, da else-Bedingung -->
        </xsl:choose>

        Comment


        • #5
          Danke für die ausführliche Antwort.
          Hat mir sehr geholfen!

          Comment

          Working...
          X