Monika: for-each und Tabellen

Beitrag lesen

Hallo,

ich habe folgendes Problem: ich gehe eine Liste mit for-each durch, und will den Inhalt in eine Tabelle schreiben. Allerdings will ich zwei Spalten haben. Wie geht das?

Hi,
genau das gleiche Problem hatte ich auch schon. Da XSL auf XML-basiert koennen keine Tags geschachtelt. Ich habe zwar ne Loesung gefunden aber recht umstaendlich.

Die XML-Daten sehen wie folgt aus. Es gibt eine Liste von Telefonnummern von Mitarbeitern:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="Mitarbeiter_Telef.xsl" ?>
<telliste>
  <raum nr="1">
    <mitarb><name>Hans Hase</name><telefon>1234</telefon></mitarb>
    <mitarb><name>Tina Tiger</name><telefon>5678</telefon></mitarb>
    <mitarb><name>Mumie Murmel</name><telefon>9123</telefon></mitarb>
    <mitarb><name>Inge Igel</name><telefon>4567</telefon></mitarb>
  </raum>
  <raum nr="2">
    <mitarb><name>Hermann Huhn</name><telefon>8912</telefon></mitarb>
    <mitarb><name>Georg Gans</name><telefon>3456</telefon></mitarb>
    <mitarb><name>Anne Aal</name><telefon>7891</telefon></mitarb>
    <mitarb><name>Roger Rabe</name><telefon>2345</telefon></mitarb>
    <mitarb><name>Walter Wiesel</name><telefon>6789</telefon></mitarb>
    <mitarb><name>Ralf Robbe</name><telefon>1357</telefon></mitarb>
    <mitarb><name>Jürgen Jaguar</name><telefon>6813</telefon></mitarb>
  </raum>
</telliste>

Diese Liste sollte in einer Tabelle pro Raum zweispaltig ausgegeben werden:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<HTML>
<BODY>
  <h2>Telefonliste</h2>
  <xsl:apply-templates />
</BODY>
</HTML>
</xsl:template>

<xsl:template match="/telliste/raum">
<table>
  <xsl:attribute name="border">1</xsl:attribute>
  <xsl:attribute name="frame">below</xsl:attribute>
  <xsl:attribute name="rules">none</xsl:attribute>
  <caption>
    <xsl:attribute name="align">left</xsl:attribute>
    xsl:textE 43 Raum </xsl:text><xsl:value-of select="@nr" />
  </caption>
  <colgroup>
  <col><xsl:attribute name="width">170</xsl:attribute></col>
  <col><xsl:attribute name="width">100</xsl:attribute></col>
  <col><xsl:attribute name="width">170</xsl:attribute></col>
  <col><xsl:attribute name="width">100</xsl:attribute></col>
  </colgroup>
  <xsl:call-template name="Schleife">
    <xsl:with-param name="Zaehler" select="1" />
    <xsl:with-param name="Ende" select="count(mitarb)" />
  </xsl:call-template>
</table>
</xsl:template>

<xsl:template name="Schleife">
 <xsl:param name="Zaehler" />
 <xsl:param name="Ende" />
 xsl:choose
  <xsl:when test="$Zaehler <= $Ende">
    <tr>
    <td><xsl:value-of select="mitarb[$Zaehler]/name" /></td>
    <td><xsl:value-of select="mitarb[$Zaehler]/telefon" /></td>
    <td><xsl:value-of select="mitarb[$Zaehler+1]/name" /></td>
    <td><xsl:value-of select="mitarb[$Zaehler+1]/telefon" /></td>
    </tr>
    <xsl:call-template name="Schleife">
      <xsl:with-param name="Zaehler" select="$Zaehler + 2" />
      <xsl:with-param name="Ende" select="$Ende" />
    </xsl:call-template>
  </xsl:when>
 </xsl:choose>
</xsl:template>

</xsl:stylesheet>