Avatar billede amoelle Nybegynder
19. april 2002 - 17:42 Der er 4 kommentarer og
1 løsning

kan en StreamResult bruges til en StreamSource ? (nej)

Jeg har et javaprogram, der skal lave et udtræk fra databasen, transformere det til xml, og derefter transformere det til html via en xsl fil.

Mit problem går ud på, at den første transformation producerer en OutputStream, og den kan jeg ikke finde ud af at bruge som input til den næste transformation.
Se nedenstående kode:
(objektet writer er af type OutputStream og objeket a er bare et objekt, der anvendes til databaseudtrækket)

Har I nogen gode tips eller forslag til andre strategier ?
pft Anne

...
//div. variable
stylesource= new StreamSource(new File("myXsl.xsl"));
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(stylesource);

// lav udtræk og få resultatet i en OutputStream
// det er formatteret som xml
dbUdtr= new DbUdtraek(writer, a);
dbUdtr.run();

//læg outputtet i en StreamResult
StreamResult tempResult = new StreamResult(writer);

// kan man ikke - inkompatible, compileren svarer:
// found  : javax.xml.transform.stream.StreamResult
// required: javax.xml.transform.stream.StreamSource
// men hvad gør man så istedet?
StreamSource tempSource = tempResult;

//transformer xml'en til html via xsl'en stylesource
StreamResult result = new StreamResult(writer);
transformer.transform(tempSource,  result);

Avatar billede codemon Nybegynder
19. april 2002 - 22:20 #1
Hvilken type er din OutputStream?

Du kan ikke læse fra en OutputStream, den er til at skrive i, hvis det ikke er en du selv har oprettet så prøv med
System.out.println (writer.getClass());
efter du har lavet dbudtrækket og fortæl hvilken klasse det er.

Hvis det er en FileOutputStream så må du lukke den og oprette en ny StreamSource med filen.
StreamSource tempSource = new StreamSource(filnavn); istedet for
StreamSource tempSource = tempResult
Avatar billede amoelle Nybegynder
23. april 2002 - 17:08 #2
Hej codemon,
Jeg fik det til at virke på nedenstående måde ved at bruge PipedInputStream og PipedOutputStream (og åbne en ny StreamSource, som du foreslog)


// Udtraekket - streames direkte igennem xslt scriptet
...
//div. variable
StreamSource styleSource = new StreamSource(new File("myXsl.xsl"));
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(styleSource);
PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream(in);


// lav udtræk og få resultatet i en PipedOutputStream
// start det i en ny tråd
Udtraek udtr = new Udtraek(out,a);
new Thread(udtr).start();

//læg outputtet i en StreamResult
StreamResult result = new StreamResult(writer);
// det kan man godt !

//transformer xml'en til html via xsl'en stylesource
transformer.transform(new StreamSource(in),  result);
Avatar billede amoelle Nybegynder
30. april 2002 - 10:04 #3
hej codemon,
meld dig lige med et svar, så du kan få dine points ...
Avatar billede codemon Nybegynder
06. maj 2002 - 15:06 #4
amoelle der var en smart lille løsning du fandt der.
Jeg skal ikke have nogle point, jeg hjalp jo ikke det mindste. (til gengæld står jeg lige nu og kan bruge din løsning i en lidt anden sammenhæng)
Avatar billede amoelle Nybegynder
30. august 2002 - 15:31 #5
Tak til codemon for at kommentere. Det triggede udarbejdelsen af den endelige løsning
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester