Newsgroup: it.comp.java
Titolo: salvare un XML con DOM

salve a tutti,
vi porgo un quesito che mi attanaglia il cuore...
Io normalmente utilizzo sun one il quale per caricare e salvare un documento
XML mette a disposizione i seguenti metodi statici:
org.openide.xml.XMLUtil.parse
    per caricare
org.openide.xml.XMLUtil.write
   per salvare il documento xml
mi sono accorto perň che utilizzando questi metodi statici, devo
necessariamente copiare dall'utente un jar di circa 4Mb per evitare questo
ho cercato un alternativa.
con jre1.4.2_01 per il caricamento posso utilizzare
javax.xml.parsers.DocumentBuilderFactory.newInstance per tirarmi fuori il
DocumentBuilder e poi da questi il Document di DOM.
ma per salvare il documento modificato?
Ho provato a leggere XML tutto&oltre di Apogeo, riporta un esempio
sconvolgente nel quale prima il documento viene caricato, modificato e poi
convertito nodo per nodo in un enorme vettore di stringhe il quale viene poi
salvato riga per riga in un file di testo...
Vi prego ditemi che non č questo il modo giusto e che esiste qualcosa di piů
simile a org.openide.xml.XMLUtil.write.
grazie Domenico


Puoi convertire in stringa l'elemento root:
tuoDOM.getDocumentElement().toString()
In questo modo peró perdi l'XML declaration che, a seconda dei casi, puó
anche servirti
Massimo

grazie Domenico
Ti do un'indizio:
dai un'occhiata a queste classi (in questo ordine)
javax.xml.transform.TransformerFactory
javax.xml.transform.Transformer
javax.xml.transform.dom.DOMSource
javax.xml.transform.stream.StreamResult
e vedi se riesci a cavarne qualcosa.
Inviato da 
www.mynewsgate.net

 ma per salvare il documento modificato?
L'esempio sottostante funziona. Apro un file XML ( in realtą passo
all'oggetto parser una stringa XML, lo modifico aggiungendo un figlio, e lo
salvo con un nome.
import java.io.*;
import org.w3c.dom.*;
import org.apache.xerces.parsers.DOMParser;
import org.xml.sax.InputSource;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
    public Handler(String content)
    {
      	try
      	{
          // Apertura del documento
          content = "<?xml version=\"1.0\"
encoding=\"ISO-8859-1\"?><doc><aff><int></int><fase></fase></aff></doc>";
          StringReader reader;
          DOMParser domParser;
          reader = new StringReader(content);
          domParser = new DOMParser();
          domParser.parse(new InputSource(reader));
          xmlDoc = domParser.getDocument();
          reader.close();
          rootElement = xmlDoc.getDocumentElement();
          // Modifico con l'aggiunta di un figlio
          Element nuovoArticolo = xmlDoc.createElement( "COD.DELIBERA" );
          Text testoArticolo = xmlDoc.createTextNode( "bla bla bla ..." );
          nuovoArticolo.appendChild( testoArticolo );
          rootElement.appendChild( nuovoArticolo );
          NodeList tagAffList = rootElement.getElementsByTagName("aff");
          Element tagAff = (Element) tagAffList.item(0);
          tagAff.appendChild( nuovoArticolo );
          tagAff.appendChild( xmlDoc.createEl7ement("PIPPO") );
          // Scrivo su file
          Writer writer = new FileWriter("c:\\test.xml");
          OutputFormat format = new OutputFormat(xmlDoc);
          format.setIndenting(true);
          XMLSerializer serializer = new XMLSerializer(writer,format);
          serializer.asDOMSerializer();
          serializer.serialize(xmlDoc.getDocumentElement());
          writer.close();
    }
    catch (IOException ioe)
    {
        System.out.println("Output exception:" + ioe.getMessage());
        ioe.printStackTrace();
    }
      	catch(Exception e)
      	{
      		e.printStackTrace();
      	}
     }
Spero ti possa essere utile
ciao
Alessandro
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/