XSL-Übersicht / xsl:output

xsl:output

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.

Siehe auch: und .

method

Für "method" stehen im Allgemeinen die Alternativen xml, xhtml, html und text zur Verfügung. Schauen wir uns die folgende XSL-Logik an, die mit den verschiedenen methods aufgerufen wird:


<erg>
  <xsl:for-each select="/Orte/Ort[1]/Mensch[id &gt; 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 Endetag.


<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 &gt; 4]">
    <wert>
      <xsl:value-of select="vorname" />
    </wert>
  </xsl:for-each>
</erg>

indent

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

"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>

encoding

Die Default-Einstellung des "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"?>

omit-xml-declaration

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"/>

name

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 klare Bezeichnung kann verwendet werden in "xsl:result-document". Selbstverständlich muß das unter "format" aufgerufene xsl:output auch existieren, sonst erfolgt hier eine Fehlermeldung ("Fatal Error! Requested output format myoutput2 has not been defined").


<xsl:result-document 
     format="myoutput2" 
     href="file:///C:/wg/text.xml">
     <!-- INHALT -->
</xsl:result-document>

version

Mit "version" wird im Prolog die XML-Version definiert; hier stehen "1.0" und "1.1" zur Verfügung. Andere Einträge werden ungnädig angemeckert: "Fatal Error! XML version must be 1.0 or 1.1", auch dann, wenn omit-xml-declaration="yes" gesetzt wurde.


version="1.1"

use-character-maps

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="&#00196;" character="Ä"/>
  <xsl:output-character string="&#00228;" character="ä"/>
  <xsl:output-character string="&#00214;" character="Ö"/>
  <xsl:output-character string="&#00246;" character="ö"/>
  <xsl:output-character string="&#00220;" character="Ü"/>
  <xsl:output-character string="&#00252;" character="ü"/>
  <xsl:output-character string="&#00223;" character="ß"/>
  <xsl:output-character string="&#00181;" character="µ"/>
</xsl:character-map>

Mit dieser Deklaration können auch Sonderzeichen einfach dargestellt werden.


<erg>
  <xsl:for-each select="'Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', 'ß', 'µ'">
    <Einzelwert>
      <xsl:value-of select="."/>
    </Einzelwert>
  </xsl:for-each>
</erg>

Das Resultat dieses Aufrufs ist:


   <?xml version="1.0" encoding="utf-8"?>
   <erg>
      <Einzelwert>Ä</Einzelwert>
      <Einzelwert>ä</Einzelwert>
      <Einzelwert>Ö</Einzelwert>
      <Einzelwert>ö</Einzelwert>
      <Einzelwert>Ü</Einzelwert>
      <Einzelwert>ü</Einzelwert>
      <Einzelwert>ß</Einzelwert>
      <Einzelwert>µ</Einzelwert>
   </erg>

wg / 17. Januar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse





xsl:param



Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/output.html