Homepage-Webhilfe Event-Banner

Listen

XSL-FO enthält die Möglichkeit, Listen zu erzeugen. Hierfür wird zu allererst das Element list-block benötigt. In diesem Element werden nun list-item-Elemente untergeordnet, welche die einzelnen Listenpunkte repräsentieren. Jeder Listenpunkt enthält nun genau zwei weitere Unterelemente: list-item-label und list-item-body. Das list-item-label stellt die Beschriftung für den Listenpunkt dar. Dies ist i. d. R. ein Aufzählungszeichen oder ein fortlaufender Wert (nummerisch, alphanummerisch oder römisch). XSL-FO enthält selbst keinen Mechanismus, um eine solche geordnete Aufzählung zu erzeugen. Hier wird dann meistens das number-Element von XSLT verwendet, um einen solchen Aufzählungswert zu erzeugen (siehe Beispiel). Der eigentliche Inhalt des Aufzählungspunkts wird im Element list-item-body notiert. Sowohl im list-item-label- als auch im list-item-body-Element darf der Inhalt nicht direkt notiert werden, sondern muss in einem block-Element untergeordnet werden. Standardmäßig überlagert sich der Inhalt der Elemente list-item-label und list-item-body. Um einen Abstand zu erzeugen, werden üblicherweise die Attribute start-indent und end-indent verwendet.

XML-Code:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<?xml-stylesheet href="listen.xsl" type="text/xsl" ?>

<zahlen>
    <zahl>45</zahl>
    <zahl>39</zahl>
    <zahl>22</zahl>
    <zahl>70</zahl>
    <zahl>68</zahl>
    <zahl>12</zahl>
    <zahl>51</zahl>
    <zahl>63</zahl>
    <zahl>27</zahl>
    <zahl>94</zahl>
</zahlen>

XSL-Code:

<?xml version="1.0" encoding="UTF-8" ?>

<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" omit-xml-declaration="no" version="1.0" encoding="UTF-8" indent="yes" />
    
    <xsl:template match="/">
        <fo:root>
            <fo:layout-master-set>
                <fo:simple-page-master master-name="DIN-A4" page-height="297mm" page-width="210mm">
                    <fo:region-body region-name="inhalt" margin="2cm" />
                </fo:simple-page-master>
            </fo:layout-master-set>
            
            <fo:page-sequence master-reference="DIN-A4">
                <fo:flow flow-name="inhalt">
                    <fo:list-block>
                        <xsl:apply-templates />
                    </fo:list-block>
                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>
    
    <xsl:template match="/zahlen/zahl">
        <fo:list-item>
            <fo:list-item-label>
                <fo:block>
                    <xsl:number format="1." />
                </fo:block>
            </fo:list-item-label>
            <fo:list-item-body start-indent="10mm">
                <fo:block>
                    <xsl:value-of select="." />
                </fo:block>
            </fo:list-item-body>
        </fo:list-item>
    </xsl:template>
</xsl:stylesheet>
VorschauPDF:

Wichtig: Im obigen Beispiel wird ein fest definierter Abstand verwendet. Nachteil dieser Variante ist die Abhängigkeit der Schriftgröße sowie der evtl. zu kleine Abstand bei langen Aufzählungen. Abhilfe schafft der Attributwert label-end() im Attribut end-indent des list-item-label-Elements sowie der Attributwert body-start() im Attribut start-indent des list-item-body-Elements. Der Abstand zwischen dem list-item-label- und list-item-body-Element lässt sich dann über das Attribut provisional-distance-between-starts, welches im list-block-Element notiert wird, festlegen. Der Standardwert dieses Attributs ist 24pt.

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK