| Auf dieser Seite werden XSL-Beispiele vorgestellt, die sich aus didaktischen Gründen bewährt haben. | Jedes Beispiel zeigt Live einige spezielle Aspekte für die Anwendung von XSL |
XSL
|
Extended Stylesheet Language |
| Quelltext | Ein XSL-Programm erzeugt Quelltext aus einer XML-Datei |
| Einige interessante Tricks werden in den → XSL-Beispielen angewendet, jedoch hier noch nicht einzeln kommentiert... | |
Source-Generator |
|
|
Rechts ein kleines Beispiel von XML-Daten: 3 Datensätze, einige der Daten mit Attributen. Der Source-Generator gibt den XML-Quelltext auf einer Webseite aus. Interessante Details: XSL-Filter für alle Elemente und für alle AttributeDas Programm arbeitet mit jeder XML-Datei, kommt also ohne Kenntnis der verwendeten Elemente und Attribute aus. |
Quelltext der XML Test-Datei
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="source_generator.xsl" type="text/xsl" ?> <daten>
<zeile>
</daten>
<name sex="w">Anna</name><wert mark="min">56</wert>
</zeile><zeile> <name sex="m">Rudi</name><wert mark="max">78</wert>
</zeile><zeile> <name sex="w">Doris</name><wert>67</wert>
</zeile>
|
|
Dieses XSL-Programm erbeitet mit 3 Templates: ■ Das <xsl:template match="/"> erzeugt eine kleine Webseite. Durch Änderung der CSS-Styles tag, att und dat können sie die Darstellung nach Bedarf anpassen. ► In einer <xsl:for-each> Schleife werden templates für alle gefundenen Elemente select="." gesucht. ■ Das <xsl:template match="*"> passt auf jedes Element. ► Ein Element <tag> muss für HTML als <tag> ausgegeben werden. Die HTML-entities sind in XML unbekannt, daher wird das Äquivalent <tag> verwendet (funktioniert auch in reinem HTML). ► Der Name des Elements wird von XSL-Funktion name() geliefert. ► Vor dem Abschluss des tags müssen noch die Attribute eingefügt werden. Attribute werden mit @ vor ihrem Namen angesprochen, daher werden mit select="@*" templates für alle Attribute gesucht. ► Innerhalb jedes Elements können sich beliebig viele Daten oder child-Elemente befinden. Die CSS-Klasse class="ind" sorgt für die Einrückung des Textes, die XSL-Schleife sucht mit select="." nach templates für alle Elemente. Bei jedem Treffer wird rekursiv das gleiche template ausgeführt. ■ Das <xsl:template match="@*"> passt auf jedes Attribut. ► Das entity   erzeugt ein (non-breakable space) vor jedem Attribut, das in der Form name="wert" ausgegeben wird. ► Die XSL-Funktion name() liefert den Attribut-Namen, "." den Wert. ► Die beiden double-quotes werden mit entity " ausgegeben. Tipp: Die Ausgabe wird besser, wenn einige Zeilen des XSL-Quelltextes zusammengefasst werden. In diesem Fall werden die dabei automatisch ausgegebenen Leerzeichen unterdrückt. |
XSL Source Generator
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method = "html" /> <xsl:template match="/">
<html>
<xsl:for-each select=".">
<head> <style type="text/css" media="screen"> /* <![CDATA[ */ body,div,spab,td,{font-family:'Courier New',Courier,mono; font-size:10pt;} .ind{margin-left:20px;} .tag{color:#000;} .att{color:#0C0;} .dat{color:#00F;} /* ]]> */ </style> </head> <body> <div style="font-weight:bold; color:#C00;">XSL Source generator</div> <div class="dat"> <xsl:apply-templates />
</xsl:for-each>
</div>
</body> </html> <xsl:template match="*"> <div class="tag"><
<xsl:value-of select="name()"/><xsl:apply-templates select="@*"/>
></div>
<xsl:for-each select=".">
<div class="ind"> <xsl:apply-templates />
</xsl:for-each>
</div>
</<xsl:value-of
select="name()"/>><div class="tag"> </div>
<xsl:template match="@*">
<span class="att"> <xsl:value-of select="name()"/>
</xsl:template>="<xsl:value-of select="."/>"</span> </xsl:stylesheet> |
Live-AusgabeIm Innen-Rahmen rechts wird das Produkt angezeigt, das soeben live von ihrem Browser erzeugt wurde.► Das Produkt ist keine reine Text-Ausgabe: Der gesamte XML-Element-Baum wird analysiert und seine Struktur neu formuliert - unabhängig von der Anordnung (z.B. Zeilen, Tabulatoren, Leerzeichen) im Quelltext. |
Ausgabe für dieses Beispiel: |
|