Steffi: for each und xslfo

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>

  1. 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