Avatar billede sirsingelton Nybegynder
31. august 2007 - 13:45 Der er 23 kommentarer og
1 løsning

udskrive xml fil på jsp side

Hej

Jeg genererer et DOM dokument med

Document doc = new facade.generateXML(data);

Dokumentet bliver lavet over på en applikationsserver og returnere et Document

udskriften ser også fin ud på konsollen.

Men hvordan for jeg skrevet det ud som træstruktur i en browser.

På en jsp side, der får returneret Document doc har jeg prøvet med

out.write(doc);
out.flush;
out.close;

Dette viser kun alle data i browseren uden tags eller nogen som helst struktur.

Hvad gør jeg galt??
Avatar billede sirsingelton Nybegynder
31. august 2007 - 16:22 #1
Jeg prøver lige at forklare lidt bedre:

Jeg ønsker at udskrive en xml fil på en jsp side.

Xml filen er et DOM dokument, der er hentet fra en applikationsserver (weblogic).

jeg har prøvet noget i stil med

<%
Document doc = new facade.generateXML(data);

out.write(doc);
out.flush;
out.close;
%>

Dette udskriver dog bare alle data xml filen indeholder.

eks:

søren17sortmickael8blåmikkel23rødbente34gul... osv

xml tags'ene bliver altså ikke vist i browseren.

Jeg ved DOM'en er i orden, da den sagten kan printes fint ud i konsollen på weblogic serveren, eller til en fil. Begge uskrifter ser ud som de skal med en træstruktur.

1. Skal jeg evt fortælle jsp siden at den skal vise xml?
2. Bliver tag'sene ikke overført fra applikation til webseveren (Tomcat)?

Har desuden prøvet at angive jsp siden med :
<%@ page language="java" contentType="text/xml;charset=ISO-8859-1" %>
uden held.

samt prøvet følgene:

<%
  OutputFormat format = new OutputFormat(domObject, \"ISO-8859-1\", true);
     
  StringWriter stringOut = new StringWriter();
  XMLSerializer serial = new XMLSerializer(stringOut, format);
  try
  {
    serial.asDOMSerializer();
    serial.serialize(domObject.getDocumentElement() );
    }
    catch (Exception ex) {
      // log?
    }
%>
<%=stringOut.toString%>

Dette gav en ThreadDeath exception.

Alt hjælp er elskværdigt velkommen tak
Avatar billede arne_v Ekspert
31. august 2007 - 18:08 #2
Browere kan vise HTML.

Browsere kan vise XML.

Men det er nok et problem at vise XML inde mit i HTML.

Browseren er gaaet i HTML mode naar XML'en starter, saa alle de "invalide HTML tags"
ignoreres og saa vises kun teksten.

Mit forslag vil vaere at transformere den XML til HTML via noget XSLT.
Avatar billede arne_v Ekspert
31. august 2007 - 18:09 #3
Du kan enten lade din JSP side:

XML + XSLT -> HTML

eller du kan lade din JSP outputte noget JavaScript som requester XML fra en servlet,
formaterer den med XSLT og putter den ind paa siden.
Avatar billede sirsingelton Nybegynder
01. september 2007 - 20:20 #4
Takker

Kigger lige på nogle XSLT eksempler for at se om det er noget jeg kan finde ud af..

Hvis jeg glemmer alt om DOM, er det så muligt at generere XML fra en JSP side...
mener jeg har set noget i stil med det her taget fra sun hjemmeside:

<%@ page contentType="text/xml" %>
<%@ page import="stocks.*" %>

<jsp:useBean id="portfolio"
class="stocks.PortfolioBean" />

<%
java.util.Iterator folio =
portfolio.getPortfolio();
Stock stock = null;
%>

<?xml version="1.0" encoding="UTF-8"?>
<portfolio>
  <% while (folio.hasNext()) { %>
    <% stock = (Stock)folio.next(); %>
    <stock>
      <symbol<>%=
      stock.getSymbol() %></symbol>
      <name<>%=
      stock.getName() %></name>
      <price<>%=
      stock.getPrice() %></price>
    </stock>
  <% } %>
</portfolio>

Så i stedet for at returnere et DOM dokument returnere jeg f.eks en Collection, og bygger xml'en op direkte på jsp siden.


En anden ting.. Kan jeg eksempelvis modtage en xml fil istedet for et DOM dokument, og åbne denne i en browser fra en jsp side?
Avatar billede sirsingelton Nybegynder
01. september 2007 - 20:36 #5
Jeg er iøvrigt åben for andre idéer..
Jeg skal egentlíg bare lave en opgave, så når man går ind på en hjemmeside adresse for smidt en xml i hovedet.
Xml filen skal generes i det, man går ind på hjemmesiden og med jsp.

Tak på forhånd
Avatar billede sirsingelton Nybegynder
02. september 2007 - 01:32 #6
Jeg vil lige tilføje efter at have læst lidt om xlst.

At det xml jeg vil have vist i browseren skal være fuldstændigt som hvis man har en xml fil på skrivebordet og dobbeltklikker på den.

En browser åbner og man kan se xml filen med tags skrevet i rødt og blåt, data indholdet er vist i sort og der er en række røde minusser til venstre...intet andet.

Jeg kan forstå at man med xlst giver xml'en et helt andet udseende, hvilket er overflødigt her.

Apropos...er det muligt at include en fil som det her eks.
<jsp:include page="foobar.xml" />  ???
Avatar billede arne_v Ekspert
03. september 2007 - 01:44 #7
Jeg ville serve XML fra en servlet og ikke en JSP side.

En sådan kan godt requestes direkte fra browser.
Avatar billede arne_v Ekspert
03. september 2007 - 01:45 #8
Du kan sagtens inkludere en XML fil, men det løser ingen problemer i forhold til
at have XML tags i selve HTML.
Avatar billede arne_v Ekspert
03. september 2007 - 01:48 #9
Jeg mener stadig at du skal hente en XML fil og så formatere den.

Du kan se det stylesheet MSIE bruger til at vise en XML fil med på URL'en:
  res://msxml.dll/defaultss.xsl
Avatar billede sirsingelton Nybegynder
03. september 2007 - 06:50 #10
hej arne.

Jeg kan ikke få url'en til at fungere
Avatar billede sirsingelton Nybegynder
03. september 2007 - 19:26 #11
Hej Arne eller anden interessere

Jeg vil ikke benytte xsl eller xslt, da jeg mener de opfylder et andet behov.
Jeg vil som sagt kun have vist en xml fil på samme måde, som hvis man dobbeltklikker på den og den åbner op i en browser.

Hvis jeg vælger at benytte en Servlet, får jeg da dette layout?

Og Såfremt jeg gør...er der 200 point ekstra, hvis du kan komme med et lille eksempel på en servlet, der kan kaldes fra en browser.

Servletten kan enten have et DOM dokument til rådighed eller en xml fil. Men det er også helt fint hvis xml'en bliver generetet direkte i servletten.

Jeg håber så at jeg ud fra dette eksempel kan generere min egen.

På forhånd tak
Avatar billede arne_v Ekspert
04. september 2007 - 04:04 #12
Internet Explorer bruger XSLT til at vise XMl filer.

Er det ikke ret ambitiøst at du vil have en løsning som er bedre end hvad MS har kunnet komme op med ????
Avatar billede arne_v Ekspert
04. september 2007 - 04:05 #13
Der er kun en måde at lave det på: the hard way !

Jeg har lavet et lille komplet eksempel.
Avatar billede arne_v Ekspert
04. september 2007 - 04:06 #14
JSP side:

<html>
<head>
<title>Demo af embedded XML</title>
</head>
<body>
<h1>Normal HTML</h1>
<p>Bla bla bla</p>
<h1>XML</h1>
<xml id="demoxml" src="XmlServlet"/>
<xml id="defaultss" src="defaultss.xsl"/>
<iframe id="result"></iframe>
<form>
<input type="button" value="Vis XML" onClick="showxml()"/>
</form>
<script language="JavaScript">
function showxml() {
    var xmldoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
    xmldoc.async = false;
    xmldoc.load(demoxml);
    var xsldoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
    xsldoc.async = false;
    xsldoc.load(defaultss);
    document.all.result.contentWindow.document.write(xmldoc.transformNode(xsldoc));
}
</script>
<h1>Normal HTML</h1>
<p>Bla bla bla</p>
</body>
</html>
Avatar billede arne_v Ekspert
04. september 2007 - 04:06 #15
servlet til at hente XML:

package test;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.parsers.*;

import org.w3c.dom.*;
import org.xml.sax.*;

import com.sun.org.apache.xml.internal.serialize.*;

public class XmlServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(getServletContext().getRealPath("demo.xml"));
            OutputFormat fmt = new OutputFormat();
            fmt.setIndenting(true);
            XMLSerializer ser = new XMLSerializer(response.getOutputStream(), fmt);
            ser.serialize(doc);
        } catch (ParserConfigurationException e) {
          e.printStackTrace();
        } catch (SAXException e) {
          e.printStackTrace();
        } catch (MalformedURLException e) {
          e.printStackTrace();
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
04. september 2007 - 04:07 #16
Avatar billede arne_v Ekspert
04. september 2007 - 04:07 #17
(det er noget skod JavaScript kode, men det kan sikkert pyntes af en JavaScript kyndig)
Avatar billede sirsingelton Nybegynder
04. september 2007 - 07:08 #18
Det er fedt det her....Går igang om et par timer med at teste

Skal dog lige have lavet onclick om til onload i javascriptet

Måske du kan fortælle mig hvor filerne skal ligge i forhold til hinanden.

Jsp ligger jeg jo på tomcatten tillige med sevletten, med hvad med xsl'en?

tusind tak
Avatar billede sirsingelton Nybegynder
04. september 2007 - 09:22 #19
Og hvordan for jeg fat i servletten fra jsp'en

Er der noget med Servlet mapping, osv
Avatar billede arne_v Ekspert
05. september 2007 - 04:08 #20
.xsl skal ligge i samme dir som .jsp
Avatar billede arne_v Ekspert
05. september 2007 - 04:08 #21
servletten skal mappes til /XmlServlet i web.xml
Avatar billede arne_v Ekspert
05. september 2007 - 04:15 #22
Men jeg fik lige en ide.

Hvis du ikke vil til at kæmpe med at få det til at virke i FireFox og ikke
vil ændre noget i .xls filen, så kan det faktisk gøres nemmere.

<html>
<head>
<title>Demo af embedded XML</title>
</head>
<body>
<h1>Normal HTML</h1>
<p>Bla bla bla</p>
<h1>XML</h1>
<iframe id="result" src="XmlServlet"></iframe>
<h1>Normal HTML</h1>
<p>Bla bla bla</p>
</body>
</html>
Avatar billede sirsingelton Nybegynder
05. september 2007 - 07:07 #23
Jamen fantastisk...smid et svar.  Også på den anden tråd 

Tak for hjælpen!!!
Avatar billede arne_v Ekspert
05. september 2007 - 12:48 #24
svar
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