Avatar billede davidchristensen Praktikant
21. oktober 2003 - 15:00 Der er 24 kommentarer og
1 løsning

JSP, XML og XSL

Hejsa..

Jeg har bare et spørsmål om hvor man kan finde en god tutourial (?) hvor man med en jsp fil kan skrive xml vis xsl til html. Det er helt Basic dether..

Jeg har kigget på nettet og hvad jeg kunne finde er eksempler på hvor man har erstattet XSL med JSP.. Sådan skal det ikke være.. Jeg kunne godt tænke mig at JSP bare er det server-sprog der fysisk skriver en fil i en deffineret mappe på min server.

Det kunne også være supercool hvis der er et eksempel på hvordan man kan navngive denne fil netop ifølge hvad der står i XML-filen.. (Feks, man har en række produkter i en XML-fil som skal laves til HTML via XSL, så kan man i JSP skrive disse filer på disken og navngive filerne via Xpath hvad Id-et på hvert enkelt produkt hedder i XML-filen.. F.eks ved at bruge Xpath i en JSP fil hvor man kan vælge at kalde filen "Produkt[@id].html"

Hovedsagen er at jeg kun vil have jsp til at fungere som "skrivende" sprog og ikke som transformeringssprog - det vil jeg lade XSL om..

Skrig lige hvis dether overhovedet ikke giver nogen mening :)

David
-
Avatar billede davidchristensen Praktikant
21. oktober 2003 - 15:01 #1
vis=via
Avatar billede arne_v Ekspert
21. oktober 2003 - 15:06 #2
Vil du:

1)  generere XML i en JSP side som henviser til een anden JSP
    side som genererer XSL - og XML+XSL->HTML udføres i browseren

2)  have en JSP side som laver XML+XSL->HTML på server

?
Avatar billede davidchristensen Praktikant
21. oktober 2003 - 15:23 #3
Nummer 2.. Og eventuelt også en jsp side som laver en anden (eller feler på een gang) xml-fil eller svg eller whatever..
Avatar billede davidchristensen Praktikant
21. oktober 2003 - 15:23 #4
feler=flere.. Kors jeg "finger-mumler" idag :)
Avatar billede arne_v Ekspert
21. oktober 2003 - 15:26 #5
Så du spørger efter noget Java kode som kan lave en XSLT processing ?

(at output skal returnes severr til browser må være piece of cake)
Avatar billede davidchristensen Praktikant
21. oktober 2003 - 15:26 #6
Jeg véd bare at med .aspx kan man gøre det forholdsvis enkelt (selvom jeg så ikke ved så meget om .asp).. Men jeg har en bog der gennemgår det slavisk.. Jeg vil så ikke bruge .asp men .jsp :)
Avatar billede arne_v Ekspert
21. oktober 2003 - 15:29 #7
Det er heller ikke så svært i Java.
Avatar billede davidchristensen Praktikant
21. oktober 2003 - 15:31 #8
Nej jeg spørger efter:

(seudokode:)

Tag en xml fil (minfil.xml)
og via en xsl fil (minandenfil.xsl)
skriv en html (htmlfil.htm)
på serveren..

Det jeg så også spørger om er at om man kan bruge Xpath i jsp til at modulere hvad html-filen skal hedde..

F.eks:

Skriv en eller flere html-filer (alt efter hvad der stå f.eks i hver ID-atrribut i et produktelement i xml-filen) til mappen (www.minserver.dk/Produkter)
Avatar billede davidchristensen Praktikant
21. oktober 2003 - 15:36 #9
Men piece of cake..
Jeg aner ingenting om programmering, egentlig..

Jeg har så bare sat mig for at jeg vil lære at kunne generere en html.side udfra en xml+xsl-fil.. fordi de to sidste ting kender jeg til.. Så slipper jeg let og elegant over at skulle lære om databaser og har også en forståelig tilgang til at kunne lære .jsp..
Avatar billede davidchristensen Praktikant
21. oktober 2003 - 15:37 #10
:)
Avatar billede arne_v Ekspert
21. oktober 2003 - 15:38 #11
Hvis det er en standalone applikation så giver XML fil + XSLfil ->HTML fil
megen mening.

Men for en JSP side ville jeg da forvente XML fil + XSL fil -> output til
browser uden en HTML fil på disk.
Avatar billede davidchristensen Praktikant
21. oktober 2003 - 15:49 #12
Det er så vigtigt at den bliver skrevet fysisk på disk, synes jeg.. Men måske kan en serversidet xml+xsl>html godt være en midlertidig løsning.. Hvad skal man så linke til hvis man vil linke til den html-fil som bliver genereret af jsp.. xml eller jsp'en?
Avatar billede arne_v Ekspert
21. oktober 2003 - 15:54 #13
XML fil + XSL fil -> output til browser

sender jo HTML'en til browser med det samme uden link.

At generere en HTML fil på disk og lave link til den virker da
uhensigtsmæssigt.

Lad os sige at der kommer 10 samtidige requests efter samem info.

Så skriver man den HTML fil 10 gange til disk og alle 10 får et link
hvor de henter den sidste skrevne version.
Avatar billede davidchristensen Praktikant
21. oktober 2003 - 16:38 #14
Ja.. eller.. næ.. ideen er jo nok snarere at afbelaste CPUen så den ikke skal tænke så meget, så medmindre xml'en er blevet ændert så henviser man bare til html'en.. Ja det må være det..

Ihvertfald er jeg bare ude efter et simpelt .jsp script der kan generere en html-fil udfra xml+xsl.. Men kan jo så lave det sådan at det er når man opdatere xml man netop laver dether trick.. ellers er linket bare til en html-fil..

Ja nu har jeg det.. Så det interne (på serveren)'s måde at linke til filer på er via html.. men når man opdatere xml, så skriver xml+xsl en ny html-fil med det navn som nu er gengivet i jsp-filen..

Oh, det slår knuder på min hjerne at forklare hvad jeg egentlig mener.. :)
Avatar billede arne_v Ekspert
21. oktober 2003 - 17:14 #15
Hm.

Jeg prøvet at lave et eksempel, så kan du jo tage den derfra.
Avatar billede arne_v Ekspert
21. oktober 2003 - 21:28 #16
test.xml:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<liste>
  <element>a</element>
  <element>bb</element>
  <element>ccc</element>
</liste>

test.xsl:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<head>
</head>
<body>
<ul>
<xsl:for-each select="//element">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

(ja - det er et meget simpelt eksempel !)
Avatar billede arne_v Ekspert
21. oktober 2003 - 21:28 #17
Applikation XML fil + XSL fil -> HTML fil:

import java.io.File;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class Transform {
    public static void main(String[] args) {
        try {
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer t = tf.newTransformer(new StreamSource(new File("C:\\test.xsl")));
            t.transform(new StreamSource(new File("C:\\test.xml")), new StreamResult(new File("C:\\test.html")));
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
21. oktober 2003 - 21:29 #18
JSP side XML fil + XSL fil -> HTML output:

<%@page import="java.io.*,javax.xml.transform.*,javax.xml.transform.stream.*"%>
<%
        try {
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer t = tf.newTransformer(new StreamSource(new File("C:\\test.xsl")));
            t.transform(new StreamSource(new File("C:\\test.xml")), new StreamResult(out));
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }
%>
Avatar billede arne_v Ekspert
21. oktober 2003 - 21:29 #19
Og et svar.
Avatar billede davidchristensen Praktikant
21. oktober 2003 - 23:16 #20
OKay, tak.. Jeg havde vist bare håbet på at jsp ville være "pænere" kode end asp, men det så synes så ikke - næsten tværtigmod.. Men tak du :)
Avatar billede arne_v Ekspert
21. oktober 2003 - 23:22 #21
Pænere er jo en smags-sag.

nemmere : nej

kortere : nej

mere objekt orienteret : ja

mere struktureret : ja
Avatar billede arne_v Ekspert
21. oktober 2003 - 23:25 #22
Jeg vil sige at et rimeligt kendskab til Java er et must for at bruge JSP.
Avatar billede davidchristensen Praktikant
22. oktober 2003 - 08:26 #23
Det har jeg desværre ikke.. Har bare en drøm om selv at vil kunne skrive mine jsp-filer, så jeg kan processere xml/xsl på nogle forskellige måder..

Jeg har læst en lille smule om et tag-lib der er på http://www.devsphere.com/xml/taglib/ som ser forholdsvis enkelt ud, og det kunne være godt at blive "klog nok" til også at kunne bruge det :)

Btw. godmorgen

David
-
Avatar billede arne_v Ekspert
22. oktober 2003 - 08:35 #24
Der er lavet rigtigt mange XML ting til Java, J2EE og JSP.

Du kan jo prøve det.

Teorien er jo fin nok: et tag library er Java kode skrevet af
af Java programmører som kan bruges af ikke-programmører som
ekstra tags.
Avatar billede warpgiga Nybegynder
04. februar 2004 - 06:53 #25
Hvis det skal være JSP kan jeg anbefale JSTL (Java Standard Tag Library)
hvor du kan bruge en lign. syntax:

<c:set var="analyzedDataSorted" scope="session"><x:transform xslt="sort_analysis.xsl" xml="${analyzedDataXML}" /></c:set>

<c:out value="${analyzedDataSorted}" />


<x:parse xml="${analyzedDataSorted}" var="analyzedDataXML" />

<x:if select="count($analyzedDataXML//server-list/server) > 0">
  <x:forEach select="$analyzedDataXML//server-list/server" var="thisServer">
    <%-- ... --%>
  </x:foreach>
</x:if>
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