Beate: XSLT und Java-Servlets / Xalan-Api

Hallo,

ich will mit der Java xalan-Api eine XML-Datei in eine HTML-Datei transformieren, wobei ich eine XSL-Datei verwende.

Ich habe mir jetzt xalan 2.1.0 runtergeladen und die beiden Packages xalan.jar und xerces.jar in meinen Classpath gesetzt, so wie es in einer Anleitung steht.

In der java-Klasse binde ich folgendes Package ein:
import org.apache.xalan.xslt.*;

Dort befindet sich die Klasse "XSLTProcessor", die ich brauche...

hier der Java-Code:
XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
processor.process(new XSLInputSource(test.xml),new XSLInputSource(test.xsl),new XSLTResultTarget(test.html));

Mein Editor (Netbeans) bringt mir den Error "cannot resolve symbol: XSLTProcessor"

Warum wird die Klasse nicht gefunden? Muss ich noch irgendein anderes Package in den Classpath setzen?

Ich habe das Bespiel aus dem Buch "XSLT-Anwendung und Referenz", dort steht nichts weiter drin, außer dann man die beiden jar-Files in den Classpath setzen muss...

Vielen Dank für Hilfe!
Gruß Beate

  1. Hi Beate,

    Ich habe mir jetzt xalan 2.1.0 runtergeladen und die beiden Packages xalan.jar und xerces.jar in meinen Classpath gesetzt, so wie es in einer Anleitung steht.

    wieso denn so ne alte Version? Aktuell ist bei Xalan-J 2.6.0.

    Mein Editor (Netbeans) bringt mir den Error "cannot resolve symbol: XSLTProcessor"

    Warum wird die Klasse nicht gefunden? Muss ich noch irgendein anderes Package in den Classpath setzen?

    Nö, du musst die richtige Klasse anwenden :-) Transformieren kannst du mit der Methode Transformer.transform.

    So etwa:

    BufferedOutputStream out = null;
          TransformerFactory tfactory = TransformerFactory.newInstance();
          try
          {
            out = IOUtils.getBufferedOutputStream(stateFilename);
            Transformer transformer = tfactory.newTransformer();
            transformer.transform(
                    new DOMSource(doc),
                    new StreamResult(out));
          }
          catch (TransformerConfigurationException e)
          {
            log.error("TransformerConfigurationException:", e);
          }
          catch (TransformerException e)
          {
            log.error("TransformerException:", e);
          }
          finally
          {
            if (out != null)
            {
              out.close();
            }
          }

    IOUtils ist ne Klasse bei uns in der Firma, brauchst also nicht suchen :-) getBufferedOutputStream ist nur eine Helper-Methode, die einen BufferedOutputStream zurückliefert.

    Gruß,
    Martin

    1. Hi Martin,

      Nö, du musst die richtige Klasse anwenden :-) Transformieren
      kannst du mit der Methode Transformer.transform.

      Grade so wollte ich es nicht machen, das hatte ich vorher und das funktioniert auch. Jetzt hab ich wie gesagt dieses Buch und dort steht das so drin, wie ich es geschrieben hab. Frag mich nur, warum das nicht geht...

      Danke trotzdem,
      Gruß Beate

      1. Hi Beate,

        Frag mich nur, warum das nicht geht...

        mir ist die bewusste Klasse völlig unbekannt.

        Gruß,
        Martin