Ausgabe für sich wiederholende Elemente und Attribute
[Die hier dargestellten Methoden funktionieren im Internet Explorer Version
5.0+.]
In vielen Dokumenten wiederholen sich Elemente wie z.B. in dem vorher
vorgestellten adresse Dokument:
<?xml version='1.0' encoding="ISO-8859-1"
standalone="no"?>
<?xml-stylesheet href="adresse.xsl" type="text/xsl"?>
<!DOCTYPE adresse SYSTEM "adresse.dtd">
<adresse>
<einzeladresse>
<name>Müller</name>
<vorn>Lieschen</vorn>
<strasse>Nirgendwostr. 10</strasse>
<plz>10000</plz>
<ort>Nirgendwo</ort>
<tel art="priv">00000/12345</tel>
<tel art="off">00000/54321</tel>
</einzeladresse>
.... |
Das Element einzeladresse kann beliebig oft wiederholt werden. Das Element
tel hat ein Attribut names art, dass zwei Werte einnehmen kann. Zudem
können sich die Elemente tel und email beliebig oft wiederholen.
Die XSL Datei kann so aussehen:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template>
<xsl:for-each select="adresse/einzeladresse">
<H3 STYLE="font-family: Helvetica; font-size: 14pt;
text-indent: 0.5cm;">
<xsl:value-of select="name"/>
</H3>
<H3 STYLE="font-family: Helvetica; font-size: 14pt; text-indent:
0.5cm;">
<xsl:value-of select="vorn"/>
</H3>
<P STYLE="font-family: Helvetica; font-size: 12pt; text-indent:
0.5cm;">
<xsl:value-of select="strasse"/>
</P>
<P STYLE="font-family: Helvetica; font-size: 12pt; text-indent:
0.5cm;">
<xsl:value-of select="plz"/>
</P>
<P STYLE="font-family: Helvetica; font-size: 12pt; text-indent:
0.5cm;">
<xsl:value-of select="ort"/>
</P>
<xsl:for-each select="tel">
<xsl:choose>
<xsl:when match=".[@art='priv']">
<P STYLE="font-family: Helvetica; font-size: 12pt; color:blue;text-indent:
0.5cm;">
<xsl:value-of select="."/>
</P>
</xsl:when>
<xsl:otherwise>
<P STYLE="font-family: Helvetica; font-size: 12pt; color:red;text-indent:
0.5cm;">
<xsl:value-of select="."/>
</P>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:for-each select="email">
<P STYLE="font-family: Helvetica; font-size: 12pt; text-indent:
0.5cm;">
<xsl:value-of select="."/>
</P>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet> |
-
<xsl:for-each select="adresse/einzeladresse"> - Das Attribut for-each
sagt dem Browser, dass er nach allen Elementen suchen soll, die mit Wert
von select übereinstimmen. D.h. für jedes einzeladresse Element
wird die Formatierungsanweisung durchsucht und befolgt. Im <xsl:value-of
..> Tag steht jetzt nur noch der Name des untergeordneten Elements.
-
<xsl:for-each select="tel"> - Das Element tel kann auch mehrmals vorkommen
und muss deshalb in eine for-each-Schleife eingebettet werden. Man beachte,
dass hier im <xsl:value-of select="."/> Tag nur ein Punkt steht.
-
<xsl:choose>
<xsl:when match=".[@art='priv']"> - leitet eine sogenannte if-then
(wenn-dann) Abfrage ein. Abgefragt wird, ob das Attribut art den Wert priv
annimmt. In diesem Fall wird die nachfolgende Formatierungsanweisung
ausgeführt. Wichtig ist, dass das Attribut in eckige Klammern gesetzt,
mit einem Punkt versehen wird und dass ein Klammeraffe (@) davor steht.
-
<xsl:otherwise> - leitet die else Klausel (sonst) nach der if-then
Abfrage ein. Nachfolgend ist die Formatierungsanweisung für den Fall,
wenn das Attribut art nicht den Wert priv annimmt.