PDA

View Full Version : Modificare un file xml con Jdom


boysna
09-06-2006, 12:49
Ciao ragazzi.
Apro questo post per cercare risposta a tutti i problemi in cui potrei imbattermi ora che sto affrontando approfonditamente JDom.

Ovviamente chiunque potrà postare qui per i suoi problemi e chi potrà essere d'aiuto (spero anch'io) potrà intervenire.

Il mio primo problema è questo: ho creato una classe java con un metodo per aggiungere un tag a un file xml esistente ma il file non viene modificato.

Questa è la classe:

public class GestioneProdotti {

private String completePath, databasePath = "\\Database\\prodotti.xml";
Document document;
Element root;

public GestioneProdotti(String applicationPath) {
try {
SAXBuilder builder = new SAXBuilder();
completePath = applicationPath + databasePath;
document = builder.build(completePath);
}
catch (Exception e) {
e.printStackTrace();
}
}

public void inserisciDaForm(int taglia, String colore, String marca, int disponibilita,
int scorta_minima, int prezzo_vendita, int prezzo_acquisto)
throws IOException {

//Prendo il root del file
Element root = document.getRootElement();

//Creazione tag figli del tag prodotti
Element tagliaElement = new Element("taglia");
Element coloreElement = new Element("colore");

//Settaglio del testo di tali tag
tagliaElement.setText("" + taglia);
coloreElement.setText(colore);

//Creazione del nuovo tag prodotto
Element newprodotto = new Element("prodotti");

//Aggiunta dei tag figli al nuovo tag prodotto
newprodotto.addContent(tagliaElement);
newprodotto.addContent(coloreElement);

//Aggiunta del nuovo tag prodotti al root
root.addContent(newprodotto);

document.setRootElement(root);
XMLOutputter outputter = new XMLOutputter();
outputter.output(document, System.out);

}

}




E questo il file:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE root SYSTEM "prodotti.dtd">


<root>
<prodotti>
<taglia>43</taglia>
<colore>rosso</colore>
<marca>Nike</marca>
<disponibilita>3</disponibilita>
<scorta_minima>1</scorta_minima>
<prezzo_vendita>60</prezzo_vendita>
<prezzo_acquisto>50</prezzo_acquisto>
</prodotti>

<prodotti>
<taglia>44</taglia>
<colore>nero</colore>
<marca>Nike</marca>
<disponibilita>10</disponibilita>
<scorta_minima>6</scorta_minima>
<prezzo_vendita>100</prezzo_vendita>
<prezzo_acquisto>57</prezzo_acquisto>
</prodotti>

<prodotti>
<taglia>48</taglia>
<colore>rosso</colore>
<marca>Puma</marca>
<disponibilita>13</disponibilita>
<scorta_minima>10</scorta_minima>
<prezzo_vendita>60</prezzo_vendita>
<prezzo_acquisto>20</prezzo_acquisto>
</prodotti>

<prodotti>
<taglia>40</taglia>
<colore>giallo</colore>
<marca>Adidas</marca>
<disponibilita>4</disponibilita>
<scorta_minima>1</scorta_minima>
<prezzo_vendita>77</prezzo_vendita>
<prezzo_acquisto>45</prezzo_acquisto>
</prodotti>
</root>

robymdma
09-06-2006, 12:59
ti manca questo pezzo
FileOutputStream output = new FileOutputStream(<nomefile>);

e outputter.output va chiamata così

outputter.output(document, output);

boysna
10-06-2006, 09:28
Grazie mille va bene ora.

Ho modificato il post precedente per generalizzare la discussione a tutti i problemi riguardanti JDom.

Ciao.

boysna
15-06-2006, 17:29
Alla classe precedente ho aggiunto un nuovo metodo:


public void inserisciDaFile(String path){


//Creo il Document relativo al file da cui inserire
try {
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build("E:\\Documents and Settings\\stefano\\Desktop\\prodotti.xml");
}
catch (Exception e) {
e.printStackTrace();
}

//Prendo il root di tale Document e ne prelevo la lista dei prodotti
Element rootInput = doc.getRootElement();
Iterator listaProdotti = rootInput.getChildren().iterator();


while(listaProdotti.hasNext()){
root.addContent((Element)listaProdotti.next());
}

document.setRootElement(root);
XMLOutputter outputter = new XMLOutputter();
FileOutputStream output = new FileOutputStream(completePath);
outputter.output(document, output);




}


Ho sempre il solito problema.
Nel file che dovrebbe essere modificato non trovo nessuna modifica.

boysna
16-06-2006, 00:06
C'era un problema nel file xml.

Ora però mi da Java.NullPointerException quando chiamo la getRootElement sul Document.

boysna
16-06-2006, 09:56
Ho visto che anche l'altro metodo della classe non funziona, cioè mi da questa eccezione.

Eppure funzionava correttamente, possibile che abbia cambiato qualcosa che mi faccia avere questi errori ovunque faccia una document.getRootElement()?