<xsl:output> | |
Diese Anweisung definiert die Eigenschaften des Ausgabedokuments. | |
Kategorie | |
Element der obersten Ebene |
|
Obligatorische Attribute | |
Keine |
|
Optionale Attribute | |
|
|
Inhalt | |
Keiner. <xsl:output> ist ein leeres Element. |
|
Übergeordnete Elemente | |
<xsl:output> ist ein Element der obersten Ebene und kann nur dem Element <xsl:stylesheet> untergeordnet werden. |
|
Definition | |
XSLT-Abschnitt 16, Ausgabe |
|
Beispiel | |
Um die drei in der XSLT-Spezifikation definierten Ausgabemethoden zu veranschaulichen, werden drei Stylesheets erstellt, von denen jedes eine der drei Methoden verwendet. Das nachfolgende XML-Dokument wird in allen drei Beispielen verwendet: <?xml version="1.0"?> <list> <title>A few of my favorite albums</title> <listitem>A Love Supreme</listitem> <listitem>Beat Crazy</listitem> <listitem>Here Come the Warm Jets</listitem> <listitem>Kind of Blue</listitem> <listitem>London Calling</listitem> <listitem>Remain in Light</listitem> <listitem>The Joshua Tree</listitem> <listitem>The Indestructible Beat of Soweto</listitem> </list> Es sollen nun die drei Stylesheets und die jeweils erzeugten Ergebnisse betrachtet werden. Zunächst das Stylesheet method="xml": <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" doctype-public="-//W3C/DTD XHTML 1.0//EN" doctype-system="file:///d:/xhtml.dtd" encoding="ISO-8859-1" indent="no"/> <xsl:template match="/"> <html> <head> <title><xsl:value-of select="/list/title"/></title> </head> <body> <h1><xsl:value-of select="/list/title"/></h1> <p> <xsl:for-each select="/list/listitem"> <xsl:number format="1. "/> <xsl:value-of select="."/> <br/> </xsl:for-each> </p> </body> </html> </xsl:template> </xsl:stylesheet> Dieses Stylesheet erzeugt das folgende Ergebnis: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C/DTD XHTML 1.0//EN" "file:///d:/xhtml.dtd"> <html><head><title>A few of my favorite albums</title> </head><body><h1>A few of my favorite albums</h1> <p>1. A Love Supreme<br/>2. Beat Crazy<br/>3. Here Come the Warm Jets<br/>4. Kind of Blue<br/>5. London Calling<br/>6. Remain in Light<br/>7. The Joshua Tree<br/>8. The Indestructible Beat of Soweto<br/></p></body></html> (Dieses Listing enthält Zeilenumbrüche, die in der ursprünglichen Ausgabe nicht vorkamen. Dort wurde alles zwischen <html> und </html> in einer einzigen Zeile angezeigt.) Das Ausgabedokument besitzt die im Stylesheet angegebene Kodierung (encoding) und die DOCTYPE-Deklaration umfasst die angeforderten Bezeichner PUBLIC und SYSTEM. Selbst mit den eingefügten Zeilenumbrüchen ist es offensichtlich, dass das Dokument nicht mit zusätzlichen Leeräumen formatiert worden ist. Auch gibt es leere <br/>-Elemente im Ausgabedokument. Diese werden unterschiedlich behandelt, wenn als Ausgabemethode method="html" angegeben wird. Wo wir gerade dabei sind, hier das Stylesheet mit method="html": <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C/DTD HTML 1.0 Transitional//EN"/> <xsl:template match="/"> <html> <head> <title><xsl:value-of select="/list/title"/></title> </head> <body> <h1><xsl:value-of select="/list/title"/></h1> <p> <xsl:for-each select="/list/listitem"> <xsl:number format="1. "/> <xsl:value-of select="."/> <br/> </xsl:for-each> </p> </body> </html> </xsl:template> </xsl:stylesheet> Und hier das von diesem Stylesheet erzeugte HTML-Dokument: <!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 1.0 Transitional//EN"> <html> <head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>A few of my favorite albums</title> </head> <body> <h1>A few of my favorite albums</h1> <p>1. A Love Supreme<br>2. Beat Crazy<br>3. Here Come the Warm Jets<br>4. Kind of Blue<br>5. London Calling<br>6. Remain in Light<br>7. The Joshua Tree<br>8. The Indestructible Beat of Soweto<br> </p> </body> </html> (Wie weiter oben wurden auch hier Zeilenumbrüche eingefügt, um das Listing lesbar zu machen.) Beachten Sie, dass der XSLT-Prozessor in den <head> des HTML-Dokuments automatisch ein <META>-Element eingefügt hat. Die <br>-Elemente, die im vorigen Stylesheet leer waren, sind nun alt hergebrachte <br>-Tags. Selbst wenn diese Art der XSLT-Ausgabe kein Ergebnisdokument erzeugt, das gemäß der XML- (bzw. XHTML-)Regeln gültig ist, funktioniert es doch mit den existierenden HTML-Browsern. Das letzte Stylesheet verwendet die Ausgabemethode method="text": <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="/"> <html> <head> <title><xsl:value-of select="/list/title"/></title> </head> <body> <h1><xsl:value-of select="/list/title"/></h1> <p> <xsl:for-each select="/list/listitem"> <xsl:number format="1. "/> <xsl:value-of select="."/> <br/> </xsl:for-each> </p> </body> </html> </xsl:template> </xsl:stylesheet> Hier die Ergebnisse, wie sie von diesem Stylesheet erzeugt werden: A few of my favorite albumsA few of my favorite albums1. A Love Supreme2. Beat Crazy3. Here Come the Warm Jets4. Kind of Blue5. London Calling6. Remain in Light7. The Joshua Tree8. The Indestructible Beat of Soweto (Wie zuvor wurden auch hier Zeilenumbrüche eingefügt, damit das Dokument auf die Seite passt.) Diese Ergebnisse sind im Grunde genommen wertlos. Weshalb wurden die so sorgfältig kodierten HTML-Elemente im Text nicht ausgegeben? Der Grund dafür ist, dass die Ausgabemethode text nur Textknoten in den Ergebnisbaum einfügt. Zwar wurde angefordert, dass verschiedene HTML-Elemente zu erzeugen sind, doch wird dies mit method="text" ignoriert. |