Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


xsl:output, xsl:result-document

xsl:output, xsl:result-document

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.

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>

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

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

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"

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>

qrpic/output.jpg

wg / 31. August 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


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

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