Avatar billede brunkagen Nybegynder
10. februar 2003 - 13:20 Der er 8 kommentarer og
1 løsning

JSP vs. XSL?

Hejsa!

Jeg har en xml fil, som jeg skal have vist på en jsp side. Jeg har en servlet, som tager imod et request fra en menu. Denne servlet (controller om man vil), kalder så en bean (model om man vil), som tager sig af kontakten til JSP siden, som jo så er min viewdel. Mit spørgsmål er så, om man bør erstatte sin XSL fil med JSP siden, eller om man benytter en kombination af de 2 - således at man på JSP siden både benytter XSL filen og XML filen. Problemet er nemlig at de forskellige requests fra menuen skal behandles forskelligt!
Avatar billede arne_v Ekspert
10. februar 2003 - 16:24 #1
Grundliggende skal du vælge om du vil have din XML processet på client
eller server.

Hvis du vil have processet din XML på client så returnerer du bare
XML'en direkte til browser med en passende content-type og
et link til XSL filen, så vil browseren hente XSL filen og
lave transformationen. Forudsat at browseren understøtter XML og XSL.

Hvis du vil have processet din XML på server side så lader du
en servlet kalde en XSLT processer som f.eks. Xalan og konverterer
XML+XSL til HTML inden den sendes ud til browser.
Avatar billede brunkagen Nybegynder
12. februar 2003 - 11:36 #2
Kan du evt. give et eksempel på servleten, som kalder en XSLT processer? (Det er muligt at vi skal have flere points på bordet! :))
Avatar billede arne_v Ekspert
12. februar 2003 - 11:43 #3
Det kan jeg godt.

Stay tuned.

Har du styr på servlet, så jeg kun skal vise selve XSLT transformeringen ?

Er det OK, hvis jeg forudsætter at både XML og XSL er files on disk ?
Avatar billede arne_v Ekspert
12. februar 2003 - 11:47 #4
Der er iøvrigt et rimeligt godt eksempel på:
  http://genomenews.free.fr/xalan.html
Avatar billede arne_v Ekspert
12. februar 2003 - 12:07 #5
Her er noget kode jeg havde ligget (ændret for lidt for at beskytte
de uskyldige):

import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import org.xml.sax.*;

        try {
            InputStream xmlStream = new FileInputStream(new File("test.xml"));
            InputStream xslStream = new FileInputStream(new File("test.xsl"));
            Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlStream);
            TransformerFactory transFactory = TransformerFactory.newInstance();
            Transformer transformer = transFactory.newTransformer(new StreamSource(xslStream));
            StreamResult result = new StreamResult(System.out);
            transformer.transform(new DOMSource(document), result);
            xslStream.close();
            xmlStream.close();
        } catch (FileNotFoundException e) {
        } catch (TransformerConfigurationException e) {
        } catch (SAXException e) {
        } catch (IOException e) {
        } catch (ParserConfigurationException e) {
        } catch (FactoryConfigurationError e) {
        } catch (TransformerFactoryConfigurationError e) {
        } catch (TransformerException e) {
        }
Avatar billede arne_v Ekspert
12. februar 2003 - 12:07 #6
Det er faktisk ret simpelt.

Xalan gutterne har lavet alt det hårde arbejde.
Avatar billede brunkagen Nybegynder
12. februar 2003 - 12:27 #7
Kan det evt. gøres smartere med jDom eller er det det samme?! Skal der ikke laves en printwriter til dit kodeeksempel? Ellers får man vel ikke transformeringen vist som html?
Avatar billede arne_v Ekspert
12. februar 2003 - 12:35 #8
Man kan sikkert også bruge JDom, men jeg har ikke lige noget kode liggende.

Og 6 linier rigtig kode er da ikke så slemt.

Jeg genererede en StreamResult fra System.out i mit eksempel men
du skal selvfølgelig generere en StreamResult ud fra
response.getWriter() i din servlet.

Xalan laver XML+XSL->whatever og så kan du lave din XSL så
den genererer korrekt HTML.
Avatar billede brunkagen Nybegynder
12. februar 2003 - 13:10 #9
Takker mange gange...
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