Detto... fatto:
codice:
import java.io.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
public class XMLFile {
private SAXBuilder builder;
private Document doc;
private String nomeFile
public XMLFile(String nomeFile) {
this.nomeFile = nomeFile
creaDocumento(nomeFile);
}
private void creaDocumento() {
try {
builder = new SAXBuilder(false);
doc = builder.build( new File(nomeFile) );
} catch (Exception e) { e.printStackTrace(); }
}
public String getValore(String ramo, String nodo) {
Element datiDB = null;
String risultato = null;
try {
datiDB = doc.getRootElement().getChild(ramo);
risultato = datiDB.getChild(nodo).getText();
} catch (Exception e) { e.printStackTrace(); }
return risultato;
}
public void setValore(String ramo, String nodo, String valore) {
try {
Element datiDB = doc.getRootElement().getChild(ramo);
datiDB.getChild(nodo).setText(valore);
} catch (Exception e) { e.printStackTrace(); }
}
public void salvaFile() {
try {
XMLOutputter out = new XMLOutputter(" ", false, "UTF-8");
out.output(doc, new FileOutputStream(nomeFile));
} catch (Exception e) { e.printStackTrace(); }
}
}
Esempio d'uso: suppongo che esista un file di nome dati.xml
Questa classe, ovviamente, funziona per files strutturati così:
codice:
<?xml... ?>
<ROOT>
<FIGLIO1>
<NODO1></NODO1>
...
</FIGLIO1>
<FIGLIO2>
<NODO1></NODO1>
...
</FIGLIO2>
...
</ROOT>
codice:
XMLFile xmlFile = new XMLFile("dati.xml");
// Leggo il valore del nodo "NODO1" nel sottoalbero "FIGLIO1"
String valore = xmlFile.getValore("FIGLIO1", "NODO1");
// Lo reimposto come voglio, lo modifico
xmlFile.setValore("FIGLIO1", "NODO1", "nuovoValore");
// Salvo il file apportando le modifiche
xmlFile.salvaFile();
Ovviamente questa classe è costruita ad hoc per un file con una struttura con un massimo livello di annidamento come quello proposto, è sempre possibile gestirselo come si vuole!
Ciao.