XSLT: Erzeugen der Ausgabe


... [ Seminar XML und Haskell ] ... [ XSLT ] ... [ Prozessor-Steuerung ] ...

Übersicht: Erzeugen der Ausgabe


Direkte Angabe von Elementen

Elemente innerhalb von Templates, die nicht dem XSLT-Namensraum angehören, sowie Text werden vom XSLT-Prozessor weitgehend unbesehen in das Zieldokument übernommen:

  <xsl:template>
    <html>
      <head>
        <title>Dies ist einfacher Text</title>
      </head>
    </html>
  </xsl:template>
Nach oben

Attribute-Value-Templates

Die einzige Ausnahme bilden sogenannte "Attribute Value Templates": Attributwerte, die in geschweiften Klammern stehen, werden durch den Wert ersetzt, der als Ergebnis der Auswertung des Inhalts als XPath-Ausdruck herauskommt:

  <xsl:template>
    <xsl:param name="x">test.gif</xsl:param>
    <img src="{$x}" />
  </xsl:template>
Nach oben

Generierter Text

Es gibt auch die Möglichkeit, Textknoten direkt zu generieren:

  <xsl:template>
    <xsl:text disable-output-escaping="yes">
      &lt;
    </xsl:text>
  </xsl:template>

Setzt man den Parameter disable-output-escaping auf "yes", so wird bei der Ausgabe keine Entity-Codierung vorgenommen, d. h. das obere Codefragment erzeugt als Ausgabe ein "<".

Eine weitere Möglichkeit ist, Ergebnisse von XPath-Ausdrücken direkt auszugeben:

  <xsl:template>
    <xsl:value-of select="$x + 2" />
  </xsl:template>
Nach oben

Elemente und Attribute

Auch Elemente und Attribute können generiert werden:

  <xsl:template>
    <xsl:element name="img">
      <xsl:attribute name="src">
        <xsl:value-of select="@source"/>
      </xsl:attribute>
    </xsl:element>
  </xsl:template>

Dieser Code erzeugt ein img-Tag, dessen src-Attribut den Wert des source-Attributs des Elements im Quelldokument hat.

Um die Verwendung häufig gebrauchter Attribute zu vereinfachen, kann man sogenannte "Attribute Sets" als Toplevel-Element deklarieren:

  <xsl:attribute-set name="as1">
    <xsl:attribute name="width">
      640
    </xsl:attribute>
    <xsl:attribute name="height">
      480
    </xsl:attribute>
  </xsl:attribute-set>

  <xsl:template>
    <xsl:element name="img" use-attribute-sets="as1"/>
  </xsl:template>

Ähnlich wie Elemente lassen sich auch Kommentare und PIs generieren:

  <xsl:template>
    <xsl:comment>Dies ist ein Kommentar</xsl:comment>
    
    <xsl:processing-instruction name="pi">
      mal Daumen
    </xsl:processing-instruction>
  </xsl:template>

Ergebnis:

  <!--Dies ist ein Kommentar-->
  <?pi mal Daumen?>
Nach oben

Kopieren von Knoten

copy erzeugt eine Kopie des Knotens im Quelldokument. Attribute und untergeordnete Knoten werden jedoch nicht mitkopiert. Es ist aber möglich, Attribute-Sets zu verwenden:

  <xsl:template>
    <xsl:copy use-attribute-sets="as1"/>
  </xsl:template>

Will man eine vollständige Struktur aus dem Quelldokument kopieren, so verwendet man copy-of:

  <xsl:template>
    <xsl:copy-of select="."/>
  </xsl:template>
Nach oben

Numerierung

Zum Schluß gibt es noch die Möglichkeit, Numerierungen einzufügen. Der einfache Weg ist, einfach eine vorgegebene Zahl zu formatieren:

  <xsl:template>
    <xsl:number value="$x" format="1. "/>
  </xsl:template>

Ergebnis: "<Inhalt von x>. "

Komplizierter wird es, wenn Knoten automatisch gezählt werden sollen. Soll die Zahl etwa das n-te td-Element wiedergeben, so ist folgender Code notwendig:

  <xsl:template>
    <xsl:number count="td" from="body" format="1. "/>
  </xsl:template>

Es werden hier alle td-Elemente gezählt, beginnend beim body-Element, und die Nummer des aktuellen Knotens wird im Format "x. " ausgegeben.

Nach oben

... [ Seminar XML und Haskell ] ... [ XSLT ] ... [ Prozessor-Steuerung ] ...