# XSLT in Java verwenden



## Pasche (22. Jul 2005)

Ich habe mich ein wenig in XSLT eingearbeitet. Dabei habe ich ein Quell-XML-File und ein XSLT-Stylesheet. Jage ich beides durdh den XSLT Prozessor, erhalte ich ein schön formatiertes HTML-File  

Jetzt lese ich aber das XML-File aus einer Datenbank aus, so dass ich das komplette File in einem String habe. Wir kann ich jetzt ein XLST-Stylesheet auf diesen String anwenden?


----------



## Bleiglanz (22. Jul 2005)

```
StreamSource stylesource = 
        new StreamSource(stylesheet); 
      Transformer transformer =
        Factory.newTransformer(stylesource);
       ...usw. usf
```
lad dir den aktuellen xalan runter und schau in den ordner examples


----------



## Pasche (22. Jul 2005)

Xalan sagt mir ja schon mal was. Dann werde ich mich da mal einarbeiten. Danke


----------



## Pasche (25. Jul 2005)

Ich habe mir das Ganze jetzt mal angeschaut und folgendes versucht. Das Ganze wird in einer JSP aufgerufen, der ein Suchbegriff übergeben wird.


```
<%@ page import="org.xmldb.api.base.*" %>
<%@ page import="org.xmldb.api.modules.*" %>
<%@ page import="org.xmldb.api.*" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="javax.xml.transform.dom.*" %>
<%@ page import="javax.xml.transform.stream.*" %>

String suche = request.getParameter("suchbegriff");
Collection col = null;
      try {
         String driver = "org.apache.xindice.client.xmldb.DatabaseImpl";
         Class c = Class.forName(driver);

         Database database = (Database) c.newInstance();
         DatabaseManager.registerDatabase(database);

         col = DatabaseManager.getCollection("xmldb:xindice://83.137.103.78:8080/db/wikipedia");

         String xpath = "/output/ART/A0[SSTW='" + suche + "']";
         DOMSource src = null;
         
         XPathQueryService service =
            (XPathQueryService) col.getService("XPathQueryService", "1.0");
         ResourceSet resultSet = service.query(xpath);
         ResourceIterator results = resultSet.getIterator();
         while (results.hasMoreResources()) {
            XMLResource res = (XMLResource) results.nextResource();
            Node node = res.getContentAsDOM();   
            src = new DOMSource(node);         
         }
         
         
         
         // Generate a Transformer.
				 javax.xml.transform.Transformer transformer = Factory.newTransformer
                  (new javax.xml.transform.stream.StreamSource("foo.xsl"));
						
				 // Create an empy DOMResult object for the output.
				 javax.xml.transform.dom.DOMResult domResult = new javax.xml.transform.dom.DOMResult();

				 // Perform the transformation.
				 transformer.transform(new javax.xml.transform.dom.DOMSource(src));

				 // Now you can get the output Node from the DOMResult.
				 org.w3c.dom.Node output = domResult.getNode();
				 Result res = new StreamResult(output);

				 out.println(res.getOutputStream());
      }
      catch (XMLDBException e) {
         System.err.println("XML:DB Exception occurred " + e.errorCode);
      }
      finally {
         if (col != null) {
            col.close();
         }
      }
```

Probleme hab ich jetzt noch an zwei Stellen. Zum einen wird Factory nicht gefunden, zum anderen macht das letzte ResultSet Probleme. Soll heißen, dass sich die Seite nicht kompilieren lässt.



> Generated servlet error:
> [javac] Since fork is true, ignoring compiler setting.
> [javac] Compiling 1 source file
> [javac] Since fork is true, ignoring compiler setting.
> ...


----------



## KSG9|sebastian (26. Jul 2005)

javax.xml.transform.Transformer transformer = Factory.newTransformer 
                  (new javax.xml.transform.stream.StreamSource("foo.xsl")); 



Nennt sich das Ding nicht TransformerFactory ?



---


javac] D:\tomcat\work\Standalone\localhost\weber\ergebnis_jsp.java:134: cannot resolve symbol 
[javac] symbol : constructor DOMSource (javax.xml.transform.dom.DOMSource) 
[javac] location: class javax.xml.transform.dom.DOMSource 
[javac] transformer.transform(new javax.xml.transform.dom.DOMSource(src)); 
[javac] ^ 


Ein Blick in die API zeigt, dass es den Konstruktor DOMSource(DOMSource arg0) nicht gibt...


http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/transform/dom/DOMSource.html


----------



## Pasche (26. Jul 2005)

> [javac] D:\tomcat\work\Standalone\localhost\weber\ergebnis_jsp.java:134: cannot resolve symbol
> [javac] symbol : constructor DOMSource (javax.xml.transform.dom.DOMSource)
> [javac] location: class javax.xml.transform.dom.DOMSource
> [javac] transformer.transform(new javax.xml.transform.dom.DOMSource(src));
> ...



Und wieso steht er auf der Seite?

Constructor Summary
DOMSource()
          Zero-argument default constructor.
DOMSource(Node n)
          Create a new input source with a DOM node.
DOMSource(Node node, String systemID)
          Create a new input source with a DOM node, and with the system ID also passed in as the base URI.


----------



## byte (27. Jul 2005)

sry verguckt...


----------



## KSG9|sebastian (28. Jul 2005)

> Und wieso steht er auf der Seite?


Was meinst du damit ? 
Es gibt keinen Konstructor DOMSource(DOMSource src), oder bin ich blind ?


----------

