XML | XML-Schema | XPath | XSL-T | XSL-FO | XQuery | XProc | SVG |
XSL-T / Die XSLT - Struktur / xsl:output
![]() |
![]() |
➪ Für xsl:output, unter XSLT 2.0 auch für xsl:result-document, gibt es eine Reihe von Attributen, die den Prozessor anweisen, den Ausgabestrom zu modifizieren.
Auf dieser Seite:Siehe auch:
xsl:output, CDATA, xsl:result-document und xsl:preserve-space, xsl:strip-space.
Für method stehen im Allgemeinen die Alternativen xml, xhtml, html und text zur Verfügung. Schauen Sie sich die folgende XSL-Logik an, die ich mit den jeweiligen method-Einstellungen aufrufe:
<erg>
<xsl:for-each select="/Orte/Ort[1]/Mensch[id > 4]">
<hr/>
<xsl:value-of select="vorname" />
<br/>
</xsl:for-each>
</erg>
method="xml": Die Elemente werden wie deklariert ausgegeben.
<erg><hr/>Stefan<br/><hr/>Heini<br/></erg>
method="xhtml": Die Elemente werden wie deklariert ausgegeben, jedoch mit Start- und Ende-Tag.
<erg><hr></hr>Stefan<br></br><hr></hr>Heini<br></br></erg>
method="html": Hier werden HTML-typische Elemente wie <hr/> oder <br/> verkürzt dargestellt, damit geht die Wohlgeformtheit des XML-Dokuments verloren.
<erg><hr>Stefan<br><hr>Heini<br></erg>
method="text": Die Ausgabe erfolgt völlig ohne Elemente.
StefanHeini
Für die weiteren Beispiele verwende ich method="xml" sowie die folgende XSL-Anweisung:
<erg>
<xsl:for-each select="/Orte/Ort[1]/Mensch[id > 4]">
<wert>
<xsl:value-of select="vorname" />
</wert>
</xsl:for-each>
</erg>
Das indent-Attribut gibt an, ob die Ergebnisse mit Einrückungen versehen werden sollen. indent='yes' ergibt dieses ...
<erg>
<wert>Stefan</wert>
<wert>Heini</wert>
</erg>
..., indent='no'" (Standardwert bei method="xml") dagegen dieses Ergebnis:
<erg><wert>Stefan</wert><wert>Heini</wert></erg>
cdata-section-elements gibt die Liste aller Elemente an (durch Leerzeichen getrennt), deren Textinhalte in CDATA-Kommentaren dargestellt werden sollen.
<xsl:output method="xml" indent="yes"
cdata-section-elements="erg wert" />
Der zusätzliche Einsatz einer entsprechenden XSL-Logik
<erg>
<xsl:value-of select="reverse(('Hund', 'beisst', 'Mann'))"/>
</erg>
hat dann folgendes Ergebnis:
<ROOT>
<erg><![CDATA[Mann beisst Hund]]></erg>
<erg>
<wert><![CDATA[Stefan]]></wert>
<wert><![CDATA[Heini]]></wert>
</erg>
</ROOT>
Die Default-Einstellung von encoding ist "UTF-8". Ist ein anderer Output gewünscht, so kann das einfach mitgegeben werden.
encoding="iso-8859-1"
Im XML-Prolog erscheint dann das Encoding:
<?xml version="1.0" encoding="iso-8859-1"?>
Das Attribut omit-xml-declaration bezieht sich auf den XML-Prolog. Ist omit-xml-declaration="yes", so wird kein XML-Prolog geschrieben.
<xsl:output
method="xml"
indent="yes"
encoding="iso-8859-1"
omit-xml-declaration="yes"/>
Das name-Attribut definiert den Namen eines xsl:output. Es kann also durchaus mehrere xsl:output-Deklarationen geben.
<xsl:output method="xml"
indent="yes"
encoding="iso-8859-1"
name="myoutput1" />
<xsl:output method="text"
encoding="utf-8"
name="myoutput2" />
Die jeweilige Bezeichnung kann in xsl:result-document verwendet werden.
<xsl:result-document
format="myoutput3"
href="file:///C:/wg/text.xml">
<!-- INHALT -->
</xsl:result-document>
Selbstverständlich muss das unter format aufgerufene xsl:output auch existieren, sonst erfolgt hier eine Fehlermeldung:
Fatal Error!
Requested output format myoutput3 has not been defined
Mit version wird im Prolog die XML-Version definiert; hier stehen "1.0" und "1.1" zur Verfügung.
version="1.1"
Andere Einträge werden ungnädig angemeckert, auch dann, wenn omit-xml-declaration="yes" gesetzt wurde.
Fatal Error! XML version must be 1.0 or 1.1
In use-character-maps können die Namen von Übersetzungstabellen eingegeben werden, die im weiteren Codeverlauf deklariert werden müssen. Sind es mehrere, dann lautet der Aufruf einfach use-character-maps='charmap1 charmap2'.
<xsl:output method="xml" use-character-maps="charmap1" />
<xsl:character-map name="charmap1">
<xsl:output-character string="Ä" character="Ä"/>
<xsl:output-character string="ä" character="ä"/>
<xsl:output-character string="Ö" character="Ö"/>
<xsl:output-character string="ö" character="ö"/>
<xsl:output-character string="Ü" character="Ü"/>
<xsl:output-character string="ü" character="ü"/>
<xsl:output-character string="ß" character="ß"/>
<xsl:output-character string="µ" character="µ"/>
</xsl:character-map>
wg / 10. August 2020
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de