Thomas J.S.: for each und xslfo

Beitrag lesen

Hallo,

Hallo, habe ein Problem mit for each.
Ich würde gerne eine Bücherliste erstellen, in der natürlich mehrere Bücher vorhanden sein sollen.
Ich bekomme es aber nicht hin, dass mehrere angezeigt werden.
Beim folgenden Stylesheet werden nur die isbn nummern (also das letzte element) angezeigt. Alles andere, auch der Text, wird ignoriert.

<xsl:template match="buch">
    <xsl:for-each select="autor">

etc.

Das ist nur dann sinnvoll, wenn ein Buch mehr als einen Autor/Titel/ISBN/etc. hat. Dabei überschreibst du mit jedem neu definierten <xsl:template match="buch"> das vorherige, so dass am Ende eben nur das Templates mit isbn übrigbleibt.

Kann mir jemand helfen? Schonmal danke im Voraus.

hier ein Ausschnitt vom stylesheet:

<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="68mm"/>
<fo:table-column column-width="68mm"/>

hier fehlt dir ein weiteres "table-column"-Element (für die ISBN-Spalte)
Ich würde zudem die Überschriften in der Tabelle in einem "fo:table-header" stellen (für den Fall, dass die Liste/Tabelle länger als eine Seite ist).

fo:table-body
fo:table-row
   <fo:table-cell font-weight="bold">
        fo:blockTitel</fo:block>
   </fo:table-cell>
   <fo:table-cell font-weight="bold">
      fo:blockAutor</fo:block>
    </fo:table-cell>
   <fo:table-cell font-weight="bold">
      fo:blockISBN</fo:block>
   </fo:table-cell>
</fo:table-row>

Was du hier suchst ist eigentich:

<xsl:for-each select="buch">
      <!-- für jedes Buch eine Zeile in der Tabelle -->
   fo:table-row
      fo:table-cell
         fo:block
            <xsl:value-of select="titel" />
         </fo:block>
      </fo:table-cell>
      fo:table-cell
        fo:block
          <xsl:value-of select="autor" />
        </fo:block>
      </fo:table-cell>
      fo:table-cell
        fo:block
          <xsl:value-of select="isbn" />
        </fo:block>
      </fo:table-cell>
   </fo:table-row>
</xsl:for-each>

</fo:table-body>
</fo:table>

Grüße
Thomas