Homepage-Webhilfe Event-Banner

Ausgabe im Ergebnisbaum

Bisher haben wir die Ausgabe des Ereignisbaums durch die „direkte Notation“ der Elemente, Attribute und Textknoten gesteuert. Es gibt dafür aber auch einen anderen Weg. Auf diesen und auf weitere Möglichkeiten zur Steuerung der Ausgabe wollen wir in diesem Thema genauer eingehen.


Um in der Ausgabe ein Element zu platzieren, haben wir das Element bisher immer direkt angegeben. Alternativ können wir ein Element jedoch auch über das XSLT-Element element erzeugen. Als Attribute stehen uns name für den Elementnamen und namespace für den Namensraum des Elements zur Verfügung. Ein weiteres Attribut (use-attribute-sets) wird in Verbindung mit Attributsätzen verwendet. Dazu jedoch im nächsten Abschnitt mehr. Verwendet wird diese Art der Element-Erzeugung i. d. R. nur bei Verwendung von Attributsätzen oder bei der Erzeugung einer weiteren XSL-Datei (mit dem gleichen Namensraumpräfix, wie die eigene Datei).

XML-Code:

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

<artikel>
    <titel>Grundlagen von XSLT</titel>
    <text>Hier lernen Sie die Grundlagen von XSLT ...</text>
</artikel>

XSLT-Code:

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <head>
                <title>Elemente erzeugen - XSLT Code-Beispiel</title>
                
                <meta charset="utf-8" />
                
                <meta name="robots" content="noindex,nofollow" />
                <meta name="publisher" content="Homepage-Webhilfe" />
            </head>
            
            <body>
                <xsl:element name="article">
                    <xsl:element name="h1"><xsl:value-of select="/artikel/titel" /></xsl:element>
                    <xsl:element name="p"><xsl:value-of select="/artikel/text" /></xsl:element>
                </xsl:element>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
VorschauXML:
VorschauHTML:

Die Erzeugung von Attributen ist mittels des XSLT-Elements attribute möglich. Der Vorteil dieser Variante gegenüber der direkten Notation ist, dass die Notation an einer beliebigen Stelle innerhalb des Elements erfolgen kann und der Wert variabel (also auch aus den XML-Daten stammend) sein kann. Auch das Einschließen des Attribut-Elements in eine Abfrage ist möglich. Wie auch beim element-Element gibt es beim attribute-Element die Attribute name und namespace.

XML-Code:

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

<artikel>
    <titel zentriert="ja">Grundlagen von XSLT</titel>
    <text>
        ...
    </text>
</artikel>

XSLT-Code:

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <head>
                <title>Attribute erzeugen - XSLT Code-Beispiel</title>
                
                <meta charset="utf-8" />
                
                <meta name="robots" content="noindex,nofollow" />
                <meta name="publisher" content="Homepage-Webhilfe" />
            </head>
            
            <body>
                <article>
                    <h1>
                        <xsl:if test="/artikel/titel/@zentriert = 'ja'">
                            <xsl:attribute name="style">text-align: center;</xsl:attribute>
                        </xsl:if>
                        <xsl:value-of select="/artikel/titel" />
                    </h1>
                    <p><xsl:value-of select="/artikel/text" /></p>
                </article>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
VorschauXML:
VorschauHTML:

Um mehrere Attribute zu gruppieren, können Sie das XSLT-Element attribute-set verwenden. Man spricht hier von einem Attributsatz. Attributsätze müssen außerhalb von Templates und somit direkt innerhalb des XSLT-Wurzelelements notiert werden. Über das Attribut name können Sie einen eindeutigen Namen des Attributsatzes festlegen. Der festgelegte Name kann dann innerhalb des Attributs use-attribute-sets in den Elementen element und copy oder einem weiteren attribute-set-Element verwendet werden. Sollen mehrere Attributsätze verwendet werden, so sind diese per Leerzeichen zu trennen.

XML-Code:

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

<artikel>
    <titel>Grundlagen von XSLT</titel>
    <text>Hier lernen Sie die Grundlagen von XSLT ...</text>
</artikel>

XSLT-Code:

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:attribute-set name="box">
        <xsl:attribute name="style">margin: 5px; border: 1px dashed red; padding: 5px;</xsl:attribute>
    </xsl:attribute-set>
    
    <xsl:template match="/">
        <html>
            <head>
                <title>Attributsätze - XSLT Code-Beispiel</title>
                
                <meta charset="utf-8" />
                
                <meta name="robots" content="noindex,nofollow" />
                <meta name="publisher" content="Homepage-Webhilfe" />
            </head>
            
            <body>
                <xsl:element name="article" use-attribute-sets="box">
                    <h1><xsl:value-of select="/artikel/titel" /></h1>
                    <p><xsl:value-of select="/artikel/text" /></p>
                </xsl:element>
                
                <br />
                
                <xsl:element name="div" use-attribute-sets="box">
                    <b>Übrigens:</b> Auf unserer Website gibt es ein ausführliches Tutorial zu XML und XSLT.
                </xsl:element>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
VorschauXML:
VorschauHTML:

Möchten Sie einen Textknoten im Ergebnisbaum erzeugen, so können Sie das Element text verwenden. Bei dieser Variante bleiben Leerraumzeichen erhalten und werden „unverändert“ in die Ausgabe übertragen. Bisher haben wir „Text“ immer direkt notiert. Es wäre jedoch keinesfalls falsch, dort das text-Element zu verwenden. Verwendet wird das Element in der Realität jedoch meistens nur, um ein einzelnes Leerzeichen in die Ausgabe zu übertragen.

XML-Code:

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

<dokument>
    <titel>Text-Knoten erzeugen</titel>
</dokument>

XSLT-Code:

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <head>
                <title>Texte erzeugen - XSLT Code-Beispiel</title>
                
                <meta charset="utf-8" />
                
                <meta name="robots" content="noindex,nofollow" />
                <meta name="publisher" content="Homepage-Webhilfe" />
            </head>
            
            <body>
                <h1><xsl:value-of select="/dokument/titel" /></h1>
                <i><xsl:text>Dieser Text-Knoten wurde mit xsl:text erzeugt.</xsl:text></i>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
VorschauXML:
VorschauHTML:

Wenn Sie innerhalb eines XSLT-Skripts einen Kommentar (also zwischen den Tags <!-- und -->) platzieren, werden Sie feststellen, dass dieser Kommentar nicht im Ausgabebaum erscheint. Dies kann in einigen Situationen erwünscht sein, in anderen hingegen nicht. Möchten Sie einen Kommentar im Ergebnisbaum erzeugen, so müssen Sie das XSLT-Element comment verwenden.

XML-Code:

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

<dokument>
    <titel>Kommentar-Knoten erzeugen</titel>
</dokument>

XSLT-Code:

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <head>
                <title>Kommentare erzeugen - XSLT Code-Beispiel</title>
                
                <meta charset="utf-8" />
                
                <meta name="robots" content="noindex,nofollow" />
                <meta name="publisher" content="Homepage-Webhilfe" />
            </head>
            
            <body>
                <h1><xsl:value-of select="/dokument/titel" /></h1>
                <xsl:comment>Dieser Kommentar-Knoten wurde mit xsl:comment erzeugt.</xsl:comment>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
VorschauXML:
VorschauHTML:

Um ein Element von der XML-Datei in die Ausgabedatei zu kopieren, können Sie das XSLT-Element copy verwenden. Beim Kopiervorgang werden die Tags des Elements sowie der Textinhalt (PCDATA) kopiert. Attribute und untergeordnete Elemente werden nicht kopiert. Innerhalb des copy-Elements wird i. d. R. mit dem value-of-Element ein Knoten (also der zu kopierende Knoten) selektiert. Des Weiteren können Sie mit Hilfe des Attributs use-attribute-set dem Element einen Attributsatz zuweisen.

XML-Code:

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

<dokument>
    <h1>Knoten kopieren</h1>
</dokument>

XSLT-Code:

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <head>
                <title>Knoten kopieren - XSLT Code-Beispiel</title>
                
                <meta charset="utf-8" />
                
                <meta name="robots" content="noindex,nofollow" />
                <meta name="publisher" content="Homepage-Webhilfe" />
            </head>
            
            <body>
                <xsl:apply-templates />
            </body>
        </html>
    </xsl:template>
    
    <xsl:template match="/dokument/h1">
        <xsl:copy><xsl:value-of select="/dokument/h1" /></xsl:copy>
    </xsl:template>
</xsl:stylesheet>
VorschauXML:
VorschauHTML:

Um einen ganzen XML-Baum zu kopieren, können Sie das einteilige XSLT-Element copy-of verwenden. Das copy-of-Element kopiert das selektierte Element, inkl. den Attributen sowie allen untergeordneten Knoten (Elementknoten, Textknoten etc.). Den zu kopierenden Knoten legen Sie mit dem select-Attribut fest.

XML-Code:

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

<dokument>
    <article>
        <h1>Grundlagen von XSLT</h1>
        <p>Hier lernen Sie die Grundlagen von XSLT ...</p>
    </article>
</dokument>

XSLT-Code:

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <head>
                <title>Baum kopieren - XSLT Code-Beispiel</title>
                
                <meta charset="utf-8" />
                
                <meta name="robots" content="noindex,nofollow" />
                <meta name="publisher" content="Homepage-Webhilfe" />
            </head>
            
            <body>
                <xsl:copy-of select="/dokument/article" />
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
VorschauXML:
VorschauHTML:

Ausgabe-Icon Um ein paar Einstellungen für die Ausgabe bzw. Transformation festzulegen, können Sie das Element output verwenden. Zur Konfiguration stehen einige Attribute zur Verfügung:

method Legt die Art der Ausgabe (xml, html oder text) fest.
media-type Legt den MIME-Typ für die Ausgabe fest.
indent Gibt an, ob untergeordnete Elemente in der Ausgabe eingerückt (yes) werden sollen oder nicht (no).
version Legt die Version, welche in der XML-Deklaration verwendet wird, fest.
encoding Legt die Zeichenkodierung für den Ergebnisbaum (wird u. a. für die XML-Deklaration verwendet) fest.
standalone Legt die Einstellung für den DTD-Bezug (yes oder no) in der XML-Deklaration fest (Vergleich standalone-Attribut in XML).
omit-xml-declaration Gibt an, ob die XML-Deklaration weggelassen (yes, Standard) werden soll oder nicht (no).

Das output-Element bzw. dessen Einstellungen werden in den XSLT-Prozessoren von Browsern unzureichend unterstützt. Die meisten XSLT-Prozessoren von Browsern sind nur für die Transformation in HTML geeignet.

XML-Code:

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

<adressbuch>
    <kontakt geschlecht="m" alter="17">
        <name>Max Mustermann</name>
        <strasse>Musterstraße 123</strasse>
        <ort>12345 Musterstadt</ort>
        <email>max.mustermann@example.com</email>
    </kontakt>
    <kontakt geschlecht="w" alter="24">
        <name>Maria Musterfrau</name>
        <strasse>Musterstraße 456</strasse>
        <ort>67890 Musterhafen</ort>
        <email>m.musterfrau@example.com</email>
    </kontakt>
    <kontakt geschlecht="m" alter="53">
        <name>Peter Müller</name>
        <strasse>Hauptstraße 29</strasse>
        <ort>27946 Programmierstadt</ort>
        <email>petra-mueller@example.com</email>
    </kontakt>
</adressbuch>

XSLT-Code:

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" omit-xml-declaration="no" version="1.0" encoding="UTF-8" standalone="yes" indent="yes" />
    
    <xsl:template match="/">
        <mailliste>
            <xsl:apply-templates />
        </mailliste>
    </xsl:template>
    
    <xsl:template match="kontakt">
        <adresse><xsl:value-of select="email" /></adresse>
    </xsl:template>
</xsl:stylesheet>
VorschauXML (Eingabe):
VorschauXML (Ausgabe):

Wichtig: Beachten Sie, dass wenn Sie auf das Vorschau-Icon „XML (Eingabe)“ klicken, Sie vermutlich kein richtiges Ergebnis sehen werden, da Ihr Browser die Transformation von XML zu XML nicht unterstützt.

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