paggy: Münch-Methode, for-each schachteln?

Hallo, ich habe ein Problem mit der Münch Methode. Ich möchte Buchtitel nach Ihren Genres geordnet ausgeben, dabei will ich aber keine doppelten Genres haben. Deshalb habe ich das mit der Münchmethode gelöst.
Nun stehe ich vor dem Problem, dass ich ja

A
Autor

B
2.Autor

haben möchte und nicht

A
B
Autor
2.Autor

Dazu müßte ich nach meinem Wissen die for-each Schleifen schachteln. Dabei kommt aber immer eine Fehlmeldung, dass der Table child elemente fehlen...wenn ich die for-each Schleifen hintereinander schreibe, funktioniert es einwandfrei!

Weiß jemand eine Lösung für das Problem?
Danke im Voraus.
------------------------------------------------------
Hier die xml-Datei:
------------------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>

<buecher>
  <buch>
    <titel>Drei - Der dunkle Turm</titel>
    <autor>King Stephen</autor>
    <genre>Fantasy</genre>
    <preis>10,95</preis>
    <verlag>Heyne</verlag>
    <erscheinungsjahr>1997</erscheinungsjahr>
    <auflage>13</auflage>
    <isbn>3453885591</isbn>
    <bild>drei.jpg</bild>
    <sprachbild>englisch.jpg</sprachbild>
         </buch>

<buch>
   <titel>Glas - Der dunkle Turm</titel>
   <autor>King Stephen</autor>
   <genre>Fantasy</genre>
   <preis>10,95</preis>
   <verlag>Heyne</verlag>
   <erscheinungsjahr>1997</erscheinungsjahr>
   <auflage>13</auflage>
   <isbn>3453875591</isbn>
   <bild>glas.jpg</bild>
                        <sprachbild>englisch.jpg</sprachbild>

</buch>

<buch>
   <titel>Tot - Der dunkle Turm</titel>
   <autor>King Stephen</autor>
   <genre>Fantasy</genre>
   <preis>10,95</preis>
   <verlag>Heyne</verlag>
   <erscheinungsjahr>1997</erscheinungsjahr>
   <auflage>13</auflage>
   <isbn>3451875591</isbn>
   <bild>tot.jpg</bild>
                        <sprachbild>deutsch.jpg</sprachbild>
               </buch>

<buch>
               <titel>Die weiße Massai</titel>
               <autor>Hofmann Corinne</autor>
               <genre>Abenteuer</genre>
               <preis>6,95</preis>
               <verlag>Droemer Knauar</verlag>
               <erscheinungsjahr>2000</erscheinungsjahr>
               <auflage>5</auflage>
               <isbn>3426614960</isbn>
               <bild>massai.jpg</bild>
               <sprachbild>deutsch.jpg</sprachbild>
               </buch>
</buecher>

---------------------------------------------------
xsl Stylesheet
---------------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <xsl:output method="xml"/>

<xsl:key name="first_letter_autor" match="buch" use="substring(autor, 1, 1)"/>
  <xsl:key name="first_letter_titel" match="buch" use="substring(titel, 1, 1)"/>

<xsl:template match="buecher">
    fo:root
      <!-- Layout der Seiten -->
      fo:layout-master-set
        <fo:simple-page-master  master-name="inhalt"
          page-height="297mm"
          page-width="210mm"
          margin-top="2cm"
          margin-bottom="2cm"
          margin-left="2cm"
          margin-right="2cm">
          <fo:region-body region-name="inhalt"/>
        </fo:simple-page-master>

<fo:simple-page-master  master-name="index"
          page-height="297mm"
          page-width="210mm"
          margin-top="2cm"
          margin-bottom="2cm"
          margin-left="2cm"
          margin-right="2cm">
          <fo:region-body region-name="index"/>
        </fo:simple-page-master>

<fo:simple-page-master  master-name="beschreibung"
          page-height="297mm"
          page-width="210mm"
          margin-top="1cm"
          margin-bottom="1cm"
          margin-left="1cm"
          margin-right="1cm">
          <fo:region-body region-name="beschreibung"/>
        </fo:simple-page-master>
      </fo:layout-master-set>

<!-- Inhaltsverzeichnis -->
      <fo:page-sequence master-reference="inhalt">
        <fo:flow flow-name="inhalt">
          <fo:block  font-family="Helvetica"
         font-size="20pt"
         text-align="center"
         font-weight="bold"
         space-after="20pt"
         color="green"
         id="inhaltsverzeichnis">
   <fo:inline text-decoration="underline">Inhaltsverzeichnis</fo:inline>
          </fo:block>

<xsl:for-each select="buch[generate-id(.) = generate-id(
    key('first_letter_autor', substring(autor, 1, 1))[1])]">
   <xsl:sort select="substring(autor, 1, 1)" data-type="text" order="ascending"/>
   fo:block
    <xsl:value-of select="substring(autor, 1, 1)"/>
   </fo:block>

</xsl:for-each>

<xsl:for-each select="buch[generate-id(.) = generate-id(
    key('autoren', autor)[1])]">
   <xsl:sort select="autor" data-type="text" order="ascending"/>
   fo:block
    <xsl:value-of select="autor"/>
   </fo:block>

</xsl:for-each>
        </fo:flow>
      </fo:page-sequence>
      <!--Ende Inhaltsverzeichnis-->

</fo:root>
  </xsl:template>
</xsl:stylesheet>

  1. Hallo,

    Hallo, ich habe ein Problem mit der Münch Methode. Ich möchte Buchtitel nach Ihren Genres geordnet ausgeben, dabei will ich aber keine doppelten Genres haben. Deshalb habe ich das mit der Münchmethode gelöst.
    Nun stehe ich vor dem Problem, dass ich ja

    A
    Autor

    B
    2.Autor

    haben möchte und nicht

    A
    B
    Autor
    2.Autor

    Dazu müßte ich nach meinem Wissen die for-each Schleifen schachteln. Dabei kommt aber immer eine Fehlmeldung, dass der Table child elemente fehlen...wenn ich die for-each Schleifen hintereinander schreibe, funktioniert es einwandfrei!

    Weiß jemand eine Lösung für das Problem?

    <xsl:for-each select="buch[generate-id(.) = generate-id(
        key('first_letter_autor', substring(autor, 1, 1))[1])]">
       <xsl:sort select="substring(autor, 1, 1)" data-type="text" order="ascending"/>
       fo:block
        <xsl:value-of select="substring(autor, 1, 1)"/>
       </fo:block>

    </xsl:for-each>

    <xsl:for-each select="buch[generate-id(.) = generate-id(key('first_letter_autor', substring(autor, 1, 1))[1])]">
          <xsl:sort select="substring(autor, 1, 1)" data-type="text" order="ascending"/>
          fo:block
           <xsl:value-of select="substring(autor, 1, 1)"/>
          </fo:block>
          <xsl:for-each select="key('first_letter_autor', substring(autor, 1, 1))">
           fo:block
            <xsl:value-of select="autor"/>
           </fo:block>
          </xsl:for-each>
         </xsl:for-each>

    liefert:
             fo:blockH</fo:block>
             fo:blockHofmann Corinne</fo:block>
             fo:blockK</fo:block>
             fo:blockKing Stephen</fo:block>
             fo:blockKing Stephen</fo:block>
             fo:blockKing Stephen</fo:block>

    Grüße
    Thomas

    1. ...

      <xsl:for-each select="buch[generate-id(.) = generate-id(key('first_letter_autor', substring(autor, 1, 1))[1])]">
            <xsl:sort select="substring(autor, 1, 1)" data-type="text" order="ascending"/>
            fo:block
             <xsl:value-of select="substring(autor, 1, 1)"/>
            </fo:block>
            <xsl:for-each select="key('first_letter_autor', substring(autor, 1, 1))">
             fo:block
              <xsl:value-of select="autor"/>
             </fo:block>
            </xsl:for-each>
           </xsl:for-each>

      liefert:
               fo:blockH</fo:block>
               fo:blockHofmann Corinne</fo:block>
               fo:blockK</fo:block>
               fo:blockKing Stephen</fo:block>
               fo:blockKing Stephen</fo:block>
               fo:blockKing Stephen</fo:block>

      ----------------------
      <xsl:for-each select="buch[generate-id(.) = generate-id(key('first_letter_autor', substring(autor, 1, 1))[1])]">
            <xsl:sort select="substring(autor, 1, 1)" data-type="text" order="ascending"/>
            fo:block
             <xsl:value-of select="substring(autor, 1, 1)"/>
            </fo:block>
            <xsl:for-each select="key('first_letter_autor', substring(autor, 1, 1))[1]">
             fo:block
              <xsl:value-of select="autor"/>
             </fo:block>
            </xsl:for-each>
           </xsl:for-each>

      liefert:
              fo:blockH</fo:block>
               fo:blockHofmann Corinne</fo:block>
               fo:blockK</fo:block>
               fo:blockKing Stephen</fo:block>

      Thomas