for each und xslfo
Steffi
- xsl
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.
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"/>
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>
<!-- Zweite Reihe -->
fo:table-row
fo:table-cell
fo:block
<xsl:template match="buch">
<xsl:for-each select="titel">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template> </fo:block>
</fo:table-cell>
fo:table-cell
fo:block
<xsl:template match="buch">
<xsl:for-each select="autor">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template>
</fo:block>
</fo:table-cell>
fo:table-cell
fo:block
<xsl:template match="buch">
<xsl:for-each select="isbn">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
Das xml file dazu sieht so aus:
<buecher>
<buch>
<titel>...</titel>
<autor>...</autor>
<isbn>...</isbn>
</buch>
...
</buecher>
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