XSLT: Ausgabe in 2-spaltige Tabelle

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

  • XSLT: Ausgabe in 2-spaltige Tabelle

    Hi.

    Ich habe folgendes Problem.

    [vereinfachtes Beispiel]

    bsp.xml

    Quellcode

    1. <entries>
    2. <entry>eins</entry>
    3. <entry>zwei</entry>
    4. <entry>drei</entry>
    5. <entry>vier</entry>
    6. </entries>


    Wie kann ich mittels XSLT/XPATH obige XML-Datei in einer zweispaltigen Tabelle aus-
    geben, sodaß es dann bspw. folgender HTML Code herauskommt :

    Quellcode

    1. <table>
    2. <tr>
    3. <td>eins</td>
    4. <td>zwei</td>
    5. </tr>
    6. <tr>
    7. <td>drei</td>
    8. <td>vier</td>
    9. </tr>
    10. </table>


    Bin für jeden Tipp dankbar :!:
  • habs nicht getestet, aber so in der art würd ich es machen

    Quellcode

    1. <xsl:template match="/">
    2. <table><tr>
    3. <xsl:apply-templates />
    4. </tr></table>
    5. </xsl:template>
    6. <xsl:template match="entries">
    7. <td><xsl:value-of select="." /></td>
    8. <xsl:choose>
    9. <xsl:when test="position() mod 2 = 0">
    10. </tr><tr>
    11. </xsl:when>
    12. </xsl:choose>
    13. </xsl:template>
    Alles anzeigen
  • @d0nUt:

    Erstmal vielen Dank für die Antwort und die Mühe für das Posten eines Codes. In
    diese Richtung habe ich auch schon etwas mal probiert gehabt, aber leider gibt es
    bei folgenden Zeilen immer Probleme :

    Quellcode

    1. ...
    2. <xsl:when test="position() mod 2 = 0">
    3. </tr><tr>
    4. </xsl:when>
    5. ...


    </tr><tr> wird oft nicht als valides XML erkannt, weil es keinen direkten
    öffnenden bzw. schließenden Teil in der korrekten Baumdarstellung besitzt.

    Fällt dazu jemanden nen workaround ein ??? :roll:
  • Mahlzeit,

    So wie unten würd ich das mal versuchen: match einfach auf jeden 2. entry und gib dann den 1. und 2. als eine komplette Zeile aus. Habs allerdings auch nicht getestet.

    Quellcode

    1. <xsl:template match="/">
    2. <table>
    3. <xsl:apply-templates select="entry[position() mod 2 = 0]">
    4. <xsl:with-param name="pos" select="position()"/>
    5. </xsl:apply-templates>
    6. </table>
    7. </xsl:template>
    8. <xsl:template match="entry">
    9. <xsl:param name="pos">2</xsl:param>
    10. <tr>
    11. <td><xsl:value-of select="../entry[position() = $pos -1]" /></td>
    12. <td><xsl:value-of select="." /></td>
    13. </tr>
    14. </xsl:template>
    Alles anzeigen


    Du musst allerdings, falls das letzte Element ungerade ist noch ne ausgabe dafür hinzufügen

    Gruß

    Yassin