copyright (c)2003-2005   useGroup
XSLT

66151@usegroup.de

Einführung in XML/XSLT

Einstieg in XSLT

nach untenKommentare

nach untenxsl:text

nach untenxsl:template

nach untenApply-Templates ohne passende Templates

nach untenEin anderes Tag matchen

nach untenxsl:value-of

nach untenxsl:value-of

nach untenKurzform einer Ausgabe

Kommentare

nach obenKommentare 

Kommentare werden in XSLT geschrieben als

<!-- Kommentar -->
Diese Kommentare werden i.d.R. nicht in die Ausgabe übernommen, möchten Sie (z.b. für eine leichtere lesbarkeit) Kommentare in den erzeugten HTML-Text schreiben, müssen Sie die Kommentare in ein xsl:comment-tag einbetten.
<xsl:comment>< Kommentar, der übernommen wird ></xsl:comment>



xsl:text

nach obenxsl:text 

Der gesamte Text in der XSL-Datei, der ausgegeben werden soll, müsste streng genommen in xsl:text - Tags stehen. Genaugenommen wird er aber auch ausgegeben, wenn er nicht in diesen Tags steht.



xsl:template
*name

nach obenxsl:template 

Ein Template (zu deutsch: Vorlage) ist das zentrale Element in XSLT: dort werden alle Tagumwandlungen und Positionierungen vorgenommen. Beispiel: samples/xslt1.xml und samples/xslt1.xsl.

--- datei xslt1.xml
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> 
<?xml-stylesheet href="xslt1.xsl" type="text/xsl"?> 
<hello-world>
Hallo Welt!
</hello-world>
--- datei xslt1.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/TR/REC-html40">

<xsl:output method="html"/>

<xsl:template match="/">
<html>
  <body>
   <xsl:apply-templates/>
  </body>
</html>

</xsl:template>


</xsl:stylesheet>

Daraus können Sie z.B. mit "saxon -a -o xslt1.html xslt1.xml" eine HTML-Datei erstellen wenn Sie Instant Saxon benutzen.
Erklärung:
xsl:template match="/" wählt sich das tiefste Tag (hello-world), gibt zuerst einmal <html><body> aus und "wendet die Templates an". Danach wird noch </body></html> ausgegeben und die Transformation beendet. Templates anwenden heißt, dass alle Kind-Tags ausgewertet werden und Text innerhalb des Tags geschrieben wurde, ausgegeben wird. Sollte ein Kind-Tag nicht definiert sein, wird auch dessen Inhalt als Text ausgegeben, das Tag selbst wird jedoch nicht mehr in der Ausgabe stehen.



Apply-Templates ohne passende Templates

nach obenApply-Templates ohne passende Templates 

So wird auch bei folgendem Beispiel (sample/xslt2.xml) das "undefinierte" Tag b nicht übergeben, der Text nicht fett dargestellt, weil XSLT nicht wissen kann, dass b als Tag so erhalten bleiben soll.

Hallo <b>Welt</b>!



Ein anderes Tag matchen

nach obenEin anderes Tag matchen 

Mit einem zweiten xsl:template-Tag können wir auch beliebige andere Tags bearbeiten - z.B. können wir ein b-Tag kapseln (samples/xslt3.xml und samples/xslt3.xsl)


<xsl:template match="/">
<html>
  <body>
   <xsl:apply-templates/>
  </body>
</html>
</xsl:template>

<xsl:template match="b">
  Fett:<b>
   <xsl:apply-templates/>
  </b> und wieder normal:
</xsl:template>

Achten Sie immer darauf, in der XML-Datei die gewünschte XSL-Datei anzupassen.
Die Navigation im XML-Dokument ist im Artikel Grundkenntnisse geklärt - die dortigen XPath-Anweisungen werden Ihnen bei select- und match- Attributen eine wertvolle Hilfe sein.



xsl:value-of
select

nach obenxsl:value-of 

Neben der schon erwähnten Methode

xsl:apply-updates
kann man den Inhalt eines Tags durchaus auch mit value-of (
xsl:value-of select="..."
) ausgeben. Bei der Ausgabe des aktuellen Taginhaltes in einem Template kann man z.B.
<xsl:value-of select="."/>
verwenden. Der Nachteil: Der Inhalt des Tags wird nicht ausgewertet, sollten also Tags geschachtelt sein
<body> Hallo <b> Welt </b>  </body>
würde man bei einem <xsl:value-of select="/body"/> ein Hallo <b> Welt </b> sehen, auch wenn man an anderer Stelle die Behandlung von b-tags definiert hat.



xsl:value-of
select

nach obenxsl:value-of 

Attribute werden in XSLT grundsätzlich mit tagname/@attributname angesprochen, z.B. img/@src für das src-Attribut eines img-Tags. Mit

<xsl:template match="img">
Bild: <xsl:value-of select="@src"/>
</xsl:template>
kann man dann den Namen eines Bildes ausgeben.



Kurzform einer Ausgabe

nach obenKurzform einer Ausgabe 

Erfolgt die Ausgabe innerhalb von Attributen kann man anstelle eines value-ofs eine geschweifte Klammer verwenden. Siehe xslt4.xsl und xslt4.xml.


<xsl:template match="img">
  <img src="{@src}" alt="{@alt}"/>
</xsl:template>

Ist etwas eleganter als die längere Lösung (Ein kleiner Tipp: Sie könnten gar nicht <img name="<xsl:value-of select="."/>"/> verwenden weil Tags grundsätzlich beendet (nicht geschlossen) sein müssen wenn man eine XSL:value-of-Ausgabe anfängt. Sie müssten mit <xsl:element> arbeiten).



copyright (c)2003-2005   useGroup