Auswählen und Durchlaufen

(Auszug aus "XSLT Kochbuch" von Sal Mangano)

"Ich nehme einen Marmorblock und schlage alles Überflüssige ab."
François-Auguste Rodin

"Ich habe dieses Land lang und breit durchwandert und mit den besten Leuten gesprochen,
und ich kann Ihnen versichern, dass Datenverarbeitung eine Modeerscheinung ist,
die das Jahr nicht überdauern wird"

Der für Wirtschaftsbücher verantwortliche Redakteur eines großen Verlags, 1957

Einleitung

Wenn Sie etwas auch nur ansatzweise Interessantes in XML tun wollen, sind zwei verwandte Operationen beteiligt: das Feststellen, welche XML-Knoten besucht werden müssen (Auswählen) und das Feststellen, in welcher Reihenfolge Sie sie besuchen wollen (Durchlaufen). Das Auswählen ist zum größten Teil die Aufgabe von XPath, einer eigenen Spezifikation, die aber eng mit XSLT verbunden ist. Das Durchlaufen ist eine Funktion der in XSLT integrierten Kontrollstrukturen und hängt davon ab, wie Sie Ihre Templates organisieren, um diese Strukturen auszunutzen.

XSLT-Veteranen werden wahrscheinlich keine aufregenden Entdeckungen in diesem Kapitel machen, dennoch ist es aus zwei Gründen wichtig. Erstens unterscheiden die in diesen Rezepten präsentierten Ideen XSLT von anderen Programmiersprachen und gehören daher oft zu den Dingen, die Anfänger bei ihren ersten Versuchen, XSLT zu meistern, in die Irre führen. Zweitens sind die Beispiele, die in diesem Abschnitt behandelt werden, die Grundbausteine der viel komplexeren Rezepte, die in späteren Kapiteln behandelt werden. Praktisch alles, was man in XSLT macht, hat in irgendeiner Weise mit dem Auswählen und Durchlaufen zu tun. Es ist wie beim Kochen: zu wissen, wie man einen dunklen Fond herstellt, ist die Voraussetzung zum Zubereiten einer Sauce Espagnole! (Sauce Espagnole oder spanische Sauce ist eine hoch konzentrierte braune Sauce mit Tomaten, gebunden mit einer Mehlschwitze und eingekocht. Der braune Fond wird aus Kalbs- und Rinderbeinscheiben hergestellt. Sauce Espagnole ist notwendig, wenn man eine Demi-Glace machen möchte, die »Mutter« so vieler anderer brauner Saucen. Wenn es um die »Wiederverwertung« geht, schlagen Köche die Software-Entwickler um Längen!) Dieses Kapitel besteht aus Beispielen der Art »dunkler Fond« und sollte durchgearbeitet werden, bevor Sie mit den anspruchsvolleren Anwendungen von XSLT fortfahren.

Dieses Kapitel stellt zwar einige einfache Beispiele vor, es ist jedoch keine XPath- oder XSLT-Anleitung. Dem Leser sollten die Grundlagen von XPath, die unter XPath behandelt wurden, bekannt sein. Ich gehe außerdem davon aus, dass Sie wissen, welches die Standard-XSLT-Verarbeitungsregeln sind und wie XSLT feststellt, welche Templates als Nächstes verarbeitet werden sollen. Falls Sie das Gefühl haben, dass Sie auf diesen Gebieten einige Unterstützung brauchen, empfehle ich Ihnen entweder Michael Kays XSLT Programmer's Reference (Wrox Press, 2004) oder Evan Lenz' XSLT 1.0 – kurz & gut (O'Reilly, 2006). Sie werden hier keine so großen Unterschiede zwischen XSLT 1.0 und 2.0 sehen wie in den vorangegangenen Kapiteln. Das liegt daran, dass XSLT 1.0 bereits fast vollständig die Fähigkeit besaß, die meisten dieser Operationen auszudrücken. Ausnahmen bilden solche Fälle, bei denen das Auswählen auf der Konstruktion von Gruppen von Knoten beruht, die aufgrund anderer Kriterien miteinander verbunden sind als die der hierarchischen Organisation von XML. Hier bildet die neue xsl:for-each-group-Anweisung eine außerordentlich willkommene Ergänzung.

Mehrere Beispiele in diesem Abschnitt verwenden Informatikbegriffe, die üblicherweise mit Algorithmen verbunden sind, die Baumdatenstrukturen betreffen. Uneingeweihte werden sich vielleicht fragen, was Bäume mit XML zu tun haben. Die Antwort sieht so aus: XML kann als eine Sprache zum Festlegen von Bäumen betrachtet werden, diese Bäume werden dann von der Sprache XSLT verarbeitet. Um genau zu sein, kann man einen XSLT-Prozessor dazu bringen, Nicht-XML zu verarbeiten, indem man ihn mit Hilfe eines SAX-Treibers glauben macht, es wäre ein Baum. Michael Kay demonstriert diese Technik in seinem Buch XSLT Programmer's Reference ebenso wie Eric M. Burke in Java und XSLT (O'Reilly, 2001). Auf jeden Fall werden die Beispiele in diesem Kapitel durch das wichtige Konzept motiviert, dass ein Denken in den Begriffen von Bäumen es einem erlaubt, verschiedene nützliche XML-Verarbeitungstechniken zu entdecken.

Die in diesem Kapitel gelieferten Beispiele beziehen sich häufig auf die folgenden beiden Testdokumente. Um sie nicht in jedem Rezept wiederholen zu müssen, zeige ich Sie Ihnen in den Beispielen SalesBySalesPerson.xml und orgchart.xml.

Beispiel: SalesBySalesPerson.xml

<?xml version="1.0" encoding="UTF-8"?>
<salesBySalesperson>
  <salesperson name="John Adams" seniority="1">
    <product sku="10000" totalSales="10000.00"/>
    <product sku="20000" totalSales="50000.00"/>
    <product sku="25000" totalSales="920000.00"/>
  </salesperson>
  <salesperson name="Wendy Long" seniority="5">
    <product sku="10000" totalSales="990000.00"/>
    <product sku="20000" totalSales="150000.00"/>
    <product sku="30000" totalSales="5500.00"/>
  </salesperson>
  <salesperson name="Willie B. Aggressive" seniority="10">
    <product sku="10000" totalSales="1110000.00"/>
    <product sku="20000" totalSales="150000.00"/>
    <product sku="25000" totalSales="2920000.00"/>
    <product sku="30000" totalSales="115500.00"/>
    <product sku="70000" totalSales="10000.00"/>
  </salesperson>
  <salesperson name="Arty Outtolunch" seniority="10"/>
</salesBySalesperson>

Beispiel: orgchart.xml

<?xml version="1.0" encoding="UTF-8"?>
<employee name="Jil Michel" sex="female">
  <employee name="Nancy Pratt" sex="female">
    <employee name="Phill McKraken" sex="male"/>
    <employee name="Ima Little" sex="female">
      <employee name="Betsy Ross" sex="female"/>
    </employee>
  </employee>
  <employee name="Jane Doe" sex="female">
    <employee name="Walter H. Potter" sex="male"/>
    <employee name="Wendy B.K. McDonald" sex="female">
      <employee name="Craig F. Frye" sex="male"/>
      <employee name="Hardy Hamburg" sex="male"/>
      <employee name="Rich Shaker" sex="male"/>
    </employee>
  </employee>
  <employee name="Mike Rosenbaum" sex="male">
    <employee name="Cindy Post-Kellog" sex="female">
      <employee name="Allen Bran" sex="male"/>
      <employee name="Frank N. Berry" sex="male"/>
      <employee name="Jack Apple" sex="male"/>
    </employee>
    <employee name="Oscar A. Winner" sex="male">
      <employee name="Jack Nicklaus" sex="male">
        <employee name="R.P. McMurphy" sex="male"/>
      </employee>
      <employee name="Tom Hanks" sex="male">
        <employee name="Forrest Gump" sex="male"/>
        <employee name="Andrew Beckett" sex="male"/>
      </employee>
      <employee name="Susan Sarandon" sex="female">
        <employee name="Helen Prejean" sex="female"/>
      </employee>
    </employee>
  </employee>
</employee>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2006 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT Kochbuch" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O'Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de