Münch-Methode, for-each schachteln?
paggy
- xsl
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>
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 jaA
AutorB
2.Autorhaben möchte und nicht
A
B
Autor
2.AutorDazu 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
...
<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