Newsgroup: it.comp.java
Titolo: [XML]  Leggere/scrivere dati da/in file XML

Salve,
Vorrei usare semplici file XML per memorizzare dei dati.
Il file dovrebbe avere questa forma (č un'esempio) :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<dati>
	<elemento>
		<nome>
			Azelio
		</nome>
		<cognome>
			Ciampi
		</cognome>
	</elemento>
	<elemento>
		<nome>
			Bill
		</nome>
		<cognome>
			Clinton
		</cognome>
	</elemento>
	...
	...
</dati>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
E poi dovrei poter leggere/scrivere i miei dati da questo tipo di file,
per metterli in normali variabili.
Qualche idea?
Spero (penso di si) esista qualcosa di standard IN java (Senza insomma
usare classi strane).
-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Xoen
Jabber ID : 
xo...@jabber.linux.it
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 usare classi strane).
Guarda io per leggere i file mi trovo bene con xerces e per scriverli
con jdom. Quest'ultimo può anche leggerli ma mi sono trovato meglio con
il primo per la lettura, al costo di portarmi a dietro due librerie. Non
ho i link sotto mano ma mi pare di ricordare che jdom fosse di jakarta
comunque google ti può essere di aiuto.
Ciao
Davide

 con jdom.
Grazie per la risposta, esiste qualcosa di standard (cioè senza usare
classi esterne)?
Puoi farmi qualche semplice esempio per leggere e per scrivere dati su
file XML, facendo finta che si debba usare la forma del mio esempio.
Ancora grazie, anche a chi mi fornirà altre soluzioni, ed esempi.


 usare classi strane).
Java API for XML Processing (JAXP) -> 
http://java.sun.com/xml/jaxp/
dovresti trovare pure degli esempi/tutorial
-- 
{2Nd+BESt}

 Vorrei usare semplici file XML per memorizzare dei dati.
Usa una delle varie implementazioni di DOM per la gestione dei documenti 
e dei parser per la serializzazione.
Nella fattispece, da java 1.4 è stata incorporata una implementazione 
nel package javax.xml. Ti suggerisco di usare quella.

 ha scritto nel messaggio 
news:eEx1e.32809$zZ1.9...@twister1.libero.it...


So che sono gnucco... ho anche io un problema simile, per cpire come 
funziona ho bisogno di un paio di semplici listati di esempio...
Dove li posso trovare?
Grazie,
    Stefano 

 Qualche idea?
Ho trovato JDom (
http://www.jdom.org/
), è un package (free software),
anche se non è IN java.
Si deve importare org.jdom.*;
Contiene varie classi.
Document, per contentere il documento XML.
Element, per contenere i vari nodi del file XML.
Si può leggere il Document da un file (ma penso non ci siano problemi
per altri flussi), o crearlo da zero.
***  LETTURA  ***
Si può usare la classe SAXBuilder nel package org.jdom.input.
Questo dovrebbe andare (per semplificare non gestisco le eccezioni, ma
VANNO gestite) :
SAXBuilder builder = new SAXBuilder ();
Document doc = builder.build (new FileInputStream("nome_file.xml"));
***  SCRITTURA  ***
Si può usare la classe XMLOutputter nel package org.jdom.output
Esempio di scrittura di un Document in un file XML (per semplificare non
gestisco le eccezioni, ma VANNO gestite):
XMLOutputter out = new XMLOutputter ();
out.output (doc, new FileOutputStream ("nome_file.xml"));
*** MANIPOLAZIONE ***
Essenzialmente si usano le classi Document e Element.
Una volta creato/ottenuto un'oggetto Document, si può manipolare con
vari metodi.
Ad esempio per ottenere il nodo root, si può usare getRootElement() che
restituirà l'Element root.
Esempio :
Element root = doc.getRootElement();
Per ottenere l'elemento figlio con un determinato nome, si usa
getChild("nome") su un'Element.
Ad esempio, per ottenere il figlio "elemento" del mio esempio userei :
Element elemento = root.getChild ("elemento");
È anche possibile usare il metodo getChildren() per ottenere tutti gli
Element in una List (oppure alcuni Element usando getChildren ("nome"))
Le modifiche alla List si riperquoteranno sul Document.
Per ottenere il valore in un nodo si usa il metodo getContent().
Ad esempio, per leggere il valore in <elemento><nome> :
Element elemento = root.getChild ("elemento");
Element nome = elemento.getChild ("nome");
System.out.println ("NOME = "+nome.getContent());
Volendo prendere il valore di un'attributo (<elemento attr="ciao">) si
può usare il metodo getAttributeValue(), che restituisce una String.
Volendo modificare la struttura di un Document (per poi ad esempio
scriverla su file), si dovranno usare sempre le solite classi Document
ed Element.
Per creare un Document, con radice "dati" ad esempio si scriverà :
Element root = new Element ("dati");
Document doc = new Document (root);
Fatto questo, si può modificare l'Element root e le modifiche si
riperquoteranno sul Document.
È possibile aggiungere un figlio ad un'element grazie al metodo
addContent(), con lo stesso metodo è possibile inserire "roba"
all'interno del tag XML.
Ad esempio per aggiungere un Element <elemento> in un'Element <dati> :
Element elemento = new Element ("elemento");
// dati è un'oggetto Element.
dati.addContent (elemento);
Se per esempio volessi inserire all'interno del tag <nome> (avendo
un'Element "nome") la stringa "Azelio" scriverei :
Element nome = new Element ("nome"):
nome.addContent ("Azelio");
Se volessi impostare un'attributo di un tag, userei il metodo
setAttribute (String attributo, String valore).
Ad esempio, volendo impostare l'attributo bgcolor di un'Element a "red",
scriverei.
// tag è della classe Element
tag.setAttribute ("bgcolor", "red");
È possibile creare delle classi discendenti da Element per facilitarvi
la vita, ad esempio volendo creare una classe MyElement con nome e
cognome (sempre in riferimento al mio esempio) scriverò :
class MyElement extends Element {
	Element nome, cognome;
	// Costruttore
	MyElement (String n, String c) {
		super ("elemento");
		// Crea un nuovo nodo "nome"
		nome = new Element ("nome");
		// Aggiunge il testo nome (dal parametro String) al tag
		nome.addContent (n);
		// Aggiunge il figlio nome, all'elemento MyElement creato
		addContent (nome);
 
		// Crea un nuovo nodo "cognome"
		cognome = new Element ("cognome");
		// Aggiunge il testo nome (dal parametro String) al tag
		cognome.addContent (c);
		// Aggiunge il figlio cognome, all'elemento MyElement creato
		addContent (cognome);
	}
}
Suppergiù dovrebbe bastare, questo è quello che ho potuto capire
stanotte approposito di JDOM, spero di non aver fatto troppi errori e di
essere stato chiaro. Ancora una volta, ho tralasciato la gestione delle
eccezioni per chiarezza.
PS: Sono alla ricerca di un lavoro (provincia di Palermo).


 Grazie,
Prego, per qualunque problema, basta chiedere ;)
