Elektronisches Publizieren - HTML / SGML / XML - Zurück zur Gliederung
   
 

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.
Das resultierende Dokument kann man sich hier im IE5 Browser anschauen.

XML Namespaces und eine weitere Art, Formatvorlagen zu schaffen

 

    Linksammlung HTML / SGML / XML / Webdesign
   

30.11.2000
xmlform3.html
© V. Petras, 2000