Avatar billede samuelsen Nybegynder
13. september 2004 - 11:08 Der er 16 kommentarer og
1 løsning

gemme fortløbende i XML

Hej eksperter!

Jeg har lige et mindre spørgsmål, jeg ønsker at lave en "logfil" i XML, og derfor gemme nogle data i denne fil. Jeg har også forsøgt med flg. kode:
XMLEncoder Odr = new XMLEncoder( new FileOutputStream("c:\\Ordre.xml"));
    Odr.writeObject(p.getOrdrenr());
          Odr.writeObject(p.getKk_navn());
          Odr.writeObject(p.getKk_adresse());
          Odr.writeObject(p.getKk_by());
          Odr.writeObject(p.getKk_postnr());
        Odr.writeObject(p.getKk_email());
          Odr.writeObject(p.getKk_tlf());
    Odr.close();

og det virker også fint - dog opretter denne en ny fil for hver gang en person besøger websitet, det er ikke meningen, jeg ville bare lave så den tilføjer data til samme fil - altså lidt ala en database. Det er vel muligt, men jeg aner bare ikke lige hvilken funktion, statement jeg skal benytte.

håber på et svar hurtigst mulig.

Hilsen
Samuelsen
Avatar billede medions Nybegynder
13. september 2004 - 11:22 #1
Hvis du kigger på denne, så har de en append kode længere nede på siden, måske kan du bruge dette...

http://forum.java.sun.com/thread.jsp?forum=62&thread=527991&tstart=30&trange=15

//>Rune
Avatar billede arne_v Ekspert
13. september 2004 - 11:23 #2
Prøv:


XMLEncoder Odr = new XMLEncoder( new FileOutputStream("c:\\Ordre.xml", true));
Avatar billede medions Nybegynder
13. september 2004 - 11:24 #3
Men ellers er der jo muligheden for at bruge en anden parser...
Her skriver de direkte at det er muligt.

http://www.java-channel.org/display.jsp?id=c_3721

//>Rune
Avatar billede samuelsen Nybegynder
13. september 2004 - 11:47 #4
hej Arne! Det virker fint! den tilføjer data, men når den skal skrive til filen for 2, 3, 4 osv. gang så kommer der flg. fejl når jeg forsøger at åbne XML filen i IE, den ser fin ud når jeg åbner i WordPad
Fejlen er flg.:

The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.


--------------------------------------------------------------------------------

Only one top level element is allowed in an XML document. Error processing resource 'file:///C:/Ordre.xml'. Line 12, Posit...

<java version="1.4.2_01" class="java.beans.XMLDecoder">
-^
-----
Avatar billede arne_v Ekspert
13. september 2004 - 13:23 #5
Ah ja.

Der bliver jo multiple outer elements.
Avatar billede arne_v Ekspert
13. september 2004 - 13:25 #6
Det betyder at der jo ikke bare skal appendes til filen, men at hele filen
skal genskrives hver gang.


Er du sikker på at det er hvad du vil ?
Avatar billede samuelsen Nybegynder
13. september 2004 - 14:54 #7
hej arne!
jeg er langt fra sikker - hvad er der ellers af muligheder??
Avatar billede arne_v Ekspert
13. september 2004 - 18:31 #8
Database.

Flere filer.

Åben fil + xml encoder i første request og hold dem åbne og skriv objekter til dem løbende
og luk først når du er helt færdig.
Avatar billede arne_v Ekspert
19. september 2004 - 18:48 #9
Kommet videre ?
Avatar billede samuelsen Nybegynder
19. september 2004 - 19:40 #10
hej arne! jeg er ikke umiddelbart kommet videre, men har du mulighed for at komme med et kodeeksempel på at åbne xml filen, og tilføje data i denne...

På forhånd tak for hjælpen
Samuelsen
Avatar billede arne_v Ekspert
19. september 2004 - 21:47 #11
Her er en simplificeret version af hvad du har:

<%@ page import="java.io.*,java.util.*,java.beans.*" %>
<%
XMLEncoder enc = new XMLEncoder(new FileOutputStream("C:\\z.xml"));
Integer iv = new Integer(123);
enc.writeObject(iv);
Double xv = new Double(123.456);
enc.writeObject(xv);
String sv = new String("ABC");
enc.writeObject(sv);
enc.close();
%>
Data gemt !

Hver eneste request gemmer en z.xml med:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.4.1_01" class="java.beans.XMLDecoder">
<int>123</int>
<double>123.456</double>
<string>ABC</string>
</java>
Avatar billede arne_v Ekspert
19. september 2004 - 21:49 #12
Her er en version som holder encoderen åben:

<%@ page import="java.io.*,java.util.*,java.beans.*" %>
<%!
public void jspDestroy() {
  try {
      XMLEncoder enc = (XMLEncoder)getServletConfig().getServletContext().getAttribute("xmlenc");
      if(enc == null) {
        enc = new XMLEncoder(new FileOutputStream("C:\\z2.xml"));
        getServletConfig().getServletContext().setAttribute("xmlenc", enc);
      }
      enc.close();
  } catch (IOException ioex) {
      // ????
  }
}
%>
<%
XMLEncoder enc = (XMLEncoder)application.getAttribute("xmlenc");
if(enc == null) {
  enc = new XMLEncoder(new FileOutputStream("C:\\z2.xml"));
  application.setAttribute("xmlenc", enc);
}
Integer iv = new Integer(123);
enc.writeObject(iv);
Double xv = new Double(123.456);
enc.writeObject(xv);
String sv = new String("ABC");
enc.writeObject(sv);
enc.flush();
%>
Data gemt !

og start + 3 requests + shutdown gemmer en z2.xml med:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.4.1_01" class="java.beans.XMLDecoder">
<int>123</int>
<double>123.456</double>
<string>ABC</string>
<int>123</int>
<double>123.456</double>
<string>ABC</string>
<int>123</int>
<double>123.456</double>
<string>ABC</string>
</java>
Avatar billede arne_v Ekspert
19. september 2004 - 21:49 #13
Det er vel ikke den mest kønne kode på denne jord, men hvad pokker ....
Avatar billede arne_v Ekspert
19. september 2004 - 21:50 #14
Og et svar
Avatar billede samuelsen Nybegynder
23. september 2004 - 09:12 #15
hej arne! Så har jeg kigget lidt på dit eksempel - og tak for det - men hvornår kaldes funktionen jspDestroy???
Avatar billede arne_v Ekspert
23. september 2004 - 09:19 #16
Når applikationen lukkes ned.

Du kan også kode noget der lukker den bed midnat og starter på en ny fil.

Eller noget helt tredie.

Du bad om noget der kunne skrives løbende til og jeg måtte improvisere
med hvornår der skulle afsluttet.
Avatar billede samuelsen Nybegynder
23. september 2004 - 09:21 #17
hej Arne! Tak for hjælpen! Jeg kigger på det!
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