XML/XSL Schleife zählen - Zeilenumbruch

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • XML/XSL Schleife zählen - Zeilenumbruch

    Hallo!

    Ich versuche gerade eine Bildergalerie mit Hilfe eines XSL-Templates zu erstellen. Es sollen jeweils 6 Bilder in einer Zeile dargestellt werden.

    Fage: Wie kann ich eine for-each Schleife zählen und eine if/else Abfrage durchführen um eine neue Zeile zu erzeugen!?

    Hier mal mein erster Versuch:

    XML-file:

    Quellcode

    1. <lakeDistrict2006>
    2. <photo name="photo1.jpg" width="120" height="90" alt="LakeDistrict2006"/>
    3. <photo name="photo2.jpg" width="120" height="90" alt="LakeDistrict2006"/>
    4. <photo name="photo3.jpg" width="120" height="90" alt="LakeDistrict2006"/>


    XSL-file:

    Quellcode

    1. <xsl:template match="/">
    2. ...
    3. <table cellspacing="10" cellpadding="0" border="0">
    4. <tr>
    5. <xsl:for-each select="lakeDistrict2006/photo">
    6. <xsl:variable name="zaehler" select="count(//photo)" />
    7. <xsl:choose>
    8. <xsl:when test="$zaehler &lt;=6 ">
    9. <td><img src="{@name}" width="{@width}" height="{@height}" alt="{@alt}" /></td>
    10. </xsl:when>
    11. </xsl:choose>
    12. </xsl:for-each>
    13. </tr>
    14. </table>
    15. ...
    16. </xsl:template>
    Alles anzeigen


    Hat jemand eine Idee???
  • versteh das problem auch nicht ganz, alle bilder zu erhalten ist doch kein problem

    du benutzt doch eine foreach

    Quellcode

    1. <xsl:for-each select="lakeDistrict2006/photo">

    dadurch würde man alle bilder erhalten
    einzig deine when sorgt für den abbruch

    hier findet man übrigens alles wichtige (auch modulo beispiel)
    http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#choose
    aber was das mit modulo zu tun hat, weiß ich auch nicht
  • Also mit <xsl:for-each> läufst du durch alle Bilder durch. Die aktuelle Position ermittelst Du durch position() und wenn du das jeweils sechste Bild erreicht hast (modulo!), machst du eine neue Tabellenzeile.

    Quellcode

    1. <xsl:for-each select="lakeDistrict2006/photo">
    2. <td><img src="{@name}" width="{@width}" height="{@height}" alt="{@alt}" /></td>
    3. <xsl:if test="position() mod 6 = 0">
    4. </tr><tr>
    5. </xsl:if>
    6. </xsl:for-each>



    (Hab den Code nicht getestet, aber theoretisch geht's so)

    Übrigens, falls Du nur eine Bedingung abfragen möchtest, genügt <xsl:if>, sonst kannst du <xsl:choose> mit <xsl:when> und <xsl:otherwise> verwenden.

    P.S.: Wie markiert Ihr denn hier Code-Beispiele? Ich bekomm das nicht hin...

    Gruß,
    Volker