Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


20.13.2

Das Transformer-API


Das Paket javax.xml.transform enthält ein High-Level-API zum Zugriff auf beliebige XSLT-Prozessoren. In J2SDK 1.4 ist der Prozessor Xalan vom Apache-Projekt integriert. Die Homepage von Xalan ist: http://xml.apache.org/xalan-j/

Prinzipiell werden zwei Klassen zur Umsetzung eines Stylesheets zur Verfügung gestellt:
TransformerDiese Klasse interpretiert ein XSLT-Stylesheet zur Laufzeit. Sie sollte vorwiegend für einen einmaligen Gebrauch verwendet werden.
TemplatesDiese Klasse führt gewissermaßen eine Vorkompilierung des Stylesheets durch und kann daher bei mehrfacher Anwendung eines Stylesheets schneller sein. Allerdings erfordert die Vorkompilierung einen gewissen Rechenaufwand, weshalb bei einmaliger Verwendung ein Transformer vorzuziehen ist.

In der Praxis unterstützen nur sehr wenige Prozessoren kompilierte Stylesheets (beispielsweise Apaches Xalan), wobei meist die Implementierung des Templates-Mechanismus in der Entwicklung der interpretierten Variante hinterherhinkt.

Beiden Klassen ist gemeinsam, dass Exemplare nicht direkt, sondern über die TransformerFactory erzeugt werden. Diese Klasse verfügt über die Methoden getTransformer() und getTemplates(), mit denen die entsprechenden Exemplare erzeugt werden können. Bei beiden Methoden wird das Stylesheet als Implementierung des Interface Source übergeben. Dieses Interface ist ebenfalls javax.xml.transform definiert. In den Unterpaketen dom, sax und stream stehen Implementierungen bereit, die das Stylesheet als DOM-Baum, aus einem Stream oder über SAX liefern.

Das folgende Beispiel erzeugt einen Transformer, der das Stylesheet aus einer Datei ausliest, deren Name als Kommandozeilen-Parameter übergeben wird:
  // Exemplar der Factory holen
  TransformerFactory fac = TransformerFactory.newInstance();
  Source src = new StreamSource(args[0]);
  // Transformer erzeugen
  Transformer trans = fac.newTransformer(src);
Mit dem entsprechenden Transformer-Exemplar kann dann ein gegebenes XML-Dokument transformiert werden. Das Ergebnis, eine Implementierung des Interface Result, kann dabei wiederum SAX-, DOM- oder Stream-orientiert sein.
  // Transformation durchführen
  trans.transform(new StreamSource(args[1]),
                  new StreamResult(args[2]));


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.