Websiteentwicklung: XSLT: Auswahl

Aus Wikibooks

Wechseln zu: Navigation, Suche
Websiteentwicklung XSLTBild:Wikibooks buchseite.svg Auswahl


Achtung: Dieser Artikel ist noch nicht fertig gestellt. Bitte diesen Hinweis entfernen, sobald er (halbwegs) vollendet ist.

Bei der Aufbereitung mit Stylesheets müssen Sie Daten festlegen, die Sie in die Ausgabe schreiben wollen, die Sie als Sortierkriterium verwenden wollen, auf die Sie ein Template anwenden wollen, usw.. Dafür gibt es eine einheitliche Syntax, die in diesem Kapitel beschrieben wird.

[Bearbeiten] Auswählen eines Attributwertes

Angenommen, Sie haben eine Adressenliste wie die, die im vorigen Kapitel als Beispiel verwendet wurde. Sie könnten sich jetzt die Frage stellen, woher der XSLT-Prozessor weiß, welchen Wert er in die Tabellenzelle schreiben soll. Nehmen wir also das Listing etwas genauer unter die Lupe:

Im XML-Dokument:

<person vorname="Anna" nachname="Mueller" strasse="Blumenweg 42" plz="12345" ort="Musterhausen" />

Im Stylesheet:

<td><xsl:value-of select="@vorname" /></td>

An Hand der Ausgabe können Sie feststellen, dass der Attributwert @vorname wohl für ein Attribut mit dem Namen vorname stehen muss. Woher weiß der Prozessor aber, wo dieses Attribut zu finden ist?

Dies ist ganz einfach: Wenn wir das Stylesheet auf die wesentlichsten Dinge reduzieren, erhalten wir folgende Struktur:

<xsl:template match="/adressen">
   <xsl:for-each select="person">
    <xsl:sort select="@nachname" order="ascending" data-type="text" />
     <tr>
      <td><xsl:value-of select="@vorname" /></td>
     </tr>
    </xsl:for-each>
  </xsl:template>
 </xsl:stylesheet>

Daraus kann man ablesen, dass das gewünschte Attribut zu einem Element person gehört, welches sich in dem ersten Element adressen befindet. Das bedeutet also, dass auf die Werte, die das select-Attribut annehmen kann, ähnliches zutrifft wie auf relative Pfadangaben. Tatsächlich handelt es sich hierbei auch um Pfadangaben, denn in diesem Kapitel wird die so genannte XPath-Syntax angesprochen. Jedenfalls bedeutet dies, dass wenn keine absolute Adresse angegeben wird, wie zum Beispiel

/adressen/person/@vorname

einfach das aktuell verarbeitete Element, in diesem Fall person, benutzt wird.

Dies hört sich komplizierter an, als es ist: Nachfolgend ein Ausschnitt einer beispielhaften XML-Datei sowie ein beispielhafter Ausschnitt aus einem Stylesheet.

<root>
  <a blubb="abcdef" blob="ghijkl">Test</a>
  <a>
   <b asdf="qwertz">
    <c>Wikibooks ist cool!</c>
   </b>
  </a>
  <c>Dieser Text wird nicht aufgelistet, da das Template für "c"-Elemente nur bei einem
     "b"-Element als Elternelement gilt.</c>
 </root>
<xsl:template match="/root"><!-- Template für "root"-Elemente auf der ersten Ebene. -->
   <xsl:apply-templates /><!-- Wende alle zur Verfügung stehenden Templates an. -->
 </xsl:template><!-- Ende des Templates für /root. -->
 
 <xsl:template match="a"><!-- Man könnte auch /root/a schreiben. -->
   Dies ist ein "a"-Element!
   Dies ist der Wert von blubb: <xsl:value-of select="@blubb" />
   <!-- Wert des Attributes "blubb" des aktuell verarbeiteten Elements.
        Auch hier wäre wieder /root/a/@blubb möglich. -->
   <xsl:apply-templates />
 </xsl:template>
 <xsl:template match="b">
   Dies ist ein "b"-Element.
   asdf hat den Wert: <xsl:value-of select="@asdf" />
   <xsl:apply-templates />
 </xsl:template>
 
 <xsl:template match="b/c"><!-- Trifft auf alle "c"-Elemente in einem "b"-Element zu. -->
   Dies ist ein "c"-Element! Es enthält folgenden Text:
   <xsl:value-of select="." />
 </xsl:template>
 
 <xsl:template match="c"><!-- Trifft auf alle "c"-Elemente zu. Keine Ausgabe, da leerer Inhalt. -->
 </xsl:template>
 
Zurück zu Sortieren | Hoch zu XSLT | Vor zu Anhang
Persönliche Werkzeuge
Buch erstellen
  • Artikel hinzufügen
  • Hilfe zu Sammlungen