Toon posts:

[JSP] xml lezen ok, schrijven gaat niet?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben aan het proberen om een xml file te updaten via een klein formuliertje. De xml file ziet er zo uit:


code:
1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<configuratie>
  <style veld="textfield">blauw</style>
  <titel veld="textfield">Buy n $ell</titel>
  <mail_admin veld="textfield">...</mail_admin>
  <voetnoot veld="textarea">...</voetnoot>
</configuratie>


Het inlezen van de file gaat perfect. Het aanpassen van een file gaat helemaal niet, ik krijg ook geen foutmelding. Ik maak gebruik van een klasse en wat methodes om deze functies uit te voeren:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import java.awt.event.*;
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;



public class Style {
    

    private File file;
    private Element configuratie;
    private String style, titel, mail, voetnoot;
    
    public Style(File f) {
        
        this.file = f;

    
        try
        {
            SAXBuilder builder = new SAXBuilder(false);
            Document doc  = builder.build(file);
            configuratie = doc.getRootElement();


            style = (configuratie.getChild("style")).getText();
            System.out.println(style);
            titel = (configuratie.getChild("titel")).getText();
            System.out.println(titel);
            mail = (configuratie.getChild("mail_admin")).getText();
            System.out.println(mail);
            voetnoot = (configuratie.getChild("voetnoot")).getText();
            System.out.println(voetnoot);

        }   

        catch (JDOMException e)
        {
            e.printStackTrace();
        }   
    }
        
    public String getStyle()   { return style; }
    public String getTitel()   { return titel; }
    public String getMail()    { return mail; }
    public String getVoetnoot(){ return voetnoot; }
    
    
    public void updateXML(File f, String style, String titel, String mail, String voetnoot){
    
        this.file = f;
        System.out.println(f);

    
        try
        {
            SAXBuilder builder = new SAXBuilder(false);
            Document doc  = builder.build(file);
            configuratie = doc.getRootElement();
            
/////  ik heb eens geprobeerd om de elementen te verwijderen zonder resultaat           
            configuratie.removeChild("style");
            configuratie.removeChild("titel");
            configuratie.removeChild("mail_admin");
            configuratie.removeChild("voetnoot");

/////  hier probeer ik ze te updaten. 
/////  De elementen krijgen wel de waarde die ze moeten krijgen maar dit wordt percies niet weg geschreven in de xml file


            configuratie.getChild("style").setText(style);
            System.out.println(configuratie.getChild("style").getText());

            configuratie.getChild("titel").setText(titel);
            System.out.println(configuratie.getChild("titel").getText());
            
            configuratie.getChild("mail_admin").setText(mail);
            System.out.println(configuratie.getChild("mail_admin").getText());
            
            configuratie.getChild("voetnoot").setText(voetnoot);
            System.out.println(configuratie.getChild("voetnoot").getText());





        }   

        catch (JDOMException e)
        {
            e.printStackTrace();
        }   
    }
    
}



Nu vraag ik me af wat ik verkeerd doe. Ik veronderstel dat de code die ik heb geschreven zou moeten werken.

Het is niet de bedoeling dat deze code tot in de puntjes wordt ontleed, ik ben tevreden als het werkt.

Iemand een idee?


Trouwens ik ben dit allemaal lokaal aan het proberen op mijn windows xp machine (resin als webserver), ik veronderstel dat de rechten juist staan.

[ Voor 6% gewijzigd door Verwijderd op 21-05-2004 20:53 ]


  • ari3
  • Registratie: Augustus 2002
  • Niet online
Je kunt een XML bestand inlezen in een object (in het geheugen). De object-representatie van het XML-document wordt niet automatisch naar schijf gepersisteerd.

Ik zou die het org.jdom rommel niet gebruiken. Met de standaard JDK doe je het bijvoorbeeld zo:
Java:
1
2
3
4
5
Source s = new DOMSource(doc);
File f = new File(filename);
Result r = new StreamResult(f);
Transformer t = TransformerFactory.newInstance().newTransformer();
t.transform(s, r);

[ Voor 26% gewijzigd door ari3 op 21-05-2004 22:04 ]

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


Verwijderd

Topicstarter
Dat zou idd ook gaan. Maar dit is een opdracht voor het school (ik zit in men laatste jaar toegepaste informatica) en het moet met jdom ...

Dus als er iemand me kan helpen?

  • Domokoen
  • Registratie: Januari 2003
  • Laatst online: 11:01
Het lijkt mij dat je wijzigingen alleen worden opgeslagen als je je doc ook weer wegschrijft... hij wordt ingelezen in het geheugen, en daar wijzig je hem, maar als je hem niet opslaat... dan verandert er ook niets :Y)

Verwijderd

Ik kon al bijna raden dat het om een khleuven student ging. In ieder geval moet het niet met jdom voor zover ik weet. Het moet enkel kunnen draaien op corba en daar staat noch jdom noch een andere xml handler op. Je zal de libraries dus moeten includen in je webapp. Maw jdom of een andere who cares.
Maargoed ik weet dat je enkel een uitleg over jdom hebt dus eh als ik je code zie zou ik denken dat je gewoon vergeten bent je document terug naar de schijf te schrijven.

Iets in deze stijl
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// dit is je jdom object
Document d = new Document();

// voeg er wat elementen aan toe
...

// en nu wegschrijven naar bestand
try {
  XMLOutputter out = new XMLOutputter();
  out.output(d, new FileOutputStream("bestand.xml"));
} catch(Exception e) {
  System.err.println("Boohoo er liep wat mis");
  e.printStackTrace();
}


Btw eh ik heb dit gewoon gekopieerd van pagina 5 en 6 uit het document over jdom dat je op school gekregen hebt. Let op dat hij volgens mij dat bestand.xml moet kunnen vinden en niet zelf aanmaakt.
Er is ook een manier om het aan te laten maken maar dat kan je zelf wel uitzoeken neem ik aan.

[ Voor 6% gewijzigd door Verwijderd op 22-05-2004 15:05 ]