Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Modifica di xml esistente

    Ciao ragazzi!
    Xerces, questo sconosciuto...

    Dovrei modificare un file xml già esistente.
    Queste fantastiche righe che vedete qui sotto si occupano della creazione di elementi:
    codice:
    Document doc= new DocumentImpl();
    			Element root = doc.createElement("accessi");     // Create Root Element
            	Element item = doc.createElement("accesso");       // Create element
            	item.appendChild( doc.createTextNode("Jeff") );
            	root.appendChild( item );                       // atach element to Root element
            	item = doc.createElement("age");                // Create another Element
            	item.appendChild( doc.createTextNode("28" ) );
            	root.appendChild( item );                       // Attach Element to previous element down tree
            	item = doc.createElement("height");
            	item.appendChild( doc.createTextNode("1.80" ) );
            	root.appendChild( item );                       // Attach another Element - grandaugther
            	doc.appendChild( root );
    
            	OutputFormat    format  = new OutputFormat( doc );   //Serialize DOM
            	StringWriter  stringOut = new StringWriter();        //Writer will be a String
            	XMLSerializer    serial = new XMLSerializer( stringOut, format );
            	serial.asDOMSerializer();                            // As a DOM Serializer
    			serial.serialize( doc.getDocumentElement() );
    			// System.out.println("prova" + stringOut.toString()); // questa istruzione mostra l'xml
    			String AggiuntaXml = stringOut.toString();
    Il listato qui sopra è molto bello e fa (quasi) quello che voglio ottenere io.
    Ma come faccio a modificare un xml già esistente?
    Lo so..mi sto perdendo in un bicchiere d'acqua..

    Qualcuno mi sa aiutare?
    Grazie
    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

  2. #2
    Utente di HTML.it L'avatar di MMarzia
    Registrato dal
    Mar 2001
    Messaggi
    1,781
    linguaggio?

    ps: ricorda di includere il codice nell'apposito tag [*CODE] codice [*/CODE] (senza asterischi)
    io sono festosamente cicciottello :: e. cartman

    t'amo senza sapere come, nè quando nè da dove,
    t'amo direttamente senza problemi nè orgoglio:
    così ti amo perchè non so amare altrimenti

  3. #3
    Oops...
    Me ne sono dimenticato.
    Così come mi sono dimenticato di specificare il linguaggio: Java.
    Sarà stata la disperazione del momento...
    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E' una domanda a cui ho cercato risposta anch'io ma inutilmente. L'unico modo che ho trovato, molto scomodo peraltro, è stato quello di ricostuirsi l'albero usando un NodeIterator (Se non ricordo male). Il problema sorge quando l'XML contiene più di un figlio per nodo: bisogna tenerne traccia e la cosa non è semplicissima. Se ne hai la possibilità io ti consiglio di passare a JDom che funziona benissimo ed è molto intuitivo. Offre dei metodi veramente semplici e si arrangia lui.

    JDom lo puoi trovare qui: http://www.jdom.org/


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Passare a JDOM dici?
    Mi sto scaricando il pacchetto e vedo cosa riesco a combinare.
    Per ora grazie!

    Poi ti so dire come procedo..

    Ciao!
    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Io lo stò usando proficuamente, esempi di codice per manipolare XML già esistenti:
    codice:
    Il file XML:
    <?xml... ?>
    <CONFIGURAZIONE>
       <DATABASE>
          <NOME>nomeDB</NOME>
          <UTENTE>utente</UTENTE>
       </DATABASE>
    </CONFIGURAZIONE>
    
    E qui il codice per leggerlo:
    
    import java.io.*;
    import org.jdom.*;
    import org.jdom.input.*;
    ...
    try {
       SAXBuilder builder = new SAXBuilder(false);
    
       // Otengo il Document del file XML
       doc = builder.build( new File("./config.xml") );
    
       Element datiDB = null;
       String risultato = null;
    
       // Leggo il valore dell'elemento NOME del nodo DATABASE
       datiDB = doc.getRootElement().getChild("DATABASE");
       risultato = datiDB.getChild("NOME").getText();
    
       // Lo stamp a video
       System.out.println(risultato);
    } catch (Exception e) { e.printStackTrace(); }
    Come puoi vedere, è semplicissimo e maneggevolissimo. Anche i metodi per creare un XML sono veramente semplici...
    Io, per facilitarmi l'esistenza ancora di più, sono passato ad un astrazione ancora maggiore: mi sono creato una classe per la manipolazione di un file XML con metodi miei, se ti interessa te la posto.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Sto dando un'occhiata ora a Jdom e si..in effetti sembra decisamente più semplice.
    Bhe..se puoi postare qualcosa sarebbe fantastico!

    Grazie mille!!
    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Fantastico!
    Direi che è esattamente quello che devo fare!

    Davvero grazie!

    Basta!!! Non più schiavo di Xerces...

    Ciao!
    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

  10. #10
    Scusa, ancora una cosa...

    Ho inserito nella mia pagina jsp queste istruzioni:
    [*CODE]
    <%@page import="java.io.*"%>
    <%@page import="java.util.*"%>
    <%@page import="java.lang.*"%>
    <jsp:useBean id="scrivilogs" scope="request" class="scrivilogs.XMLFile"/>[*/CODE]

    Per poter utilizzare il javabean.

    Ho quindi aggiunto l'istruzione "package scrivilogs;" all'inizio del file Java ma explorer mi restituisce questo:

    [*CODE]
    type Exception report

    message

    description The server encountered an internal error () that prevented it from fulfilling this request.

    exception

    org.apache.jasper.JasperException: Unable to compile class for JSP

    An error occurred at line: 4 in the jsp file: /CreaNuovo.jsp

    Generated servlet error:
    [javac] Compiling 1 source file

    C:\Programmi\Tomcat5\work\Catalina\localhost\prova \org\apache\jsp\CreaNuovo_jsp.java:44: cannot resolve symbol
    symbol : class XMLFile
    location: package scrivilogs
    scrivilogs.XMLFile scrivilogs = null;
    ^



    An error occurred at line: 4 in the jsp file: /CreaNuovo.jsp

    Generated servlet error:
    C:\Programmi\Tomcat5\work\Catalina\localhost\prova \org\apache\jsp\CreaNuovo_jsp.java:46: cannot resolve symbol
    symbol : class XMLFile
    location: package scrivilogs
    scrivilogs = (scrivilogs.XMLFile) pageContext.getAttribute("scrivilogs", PageContext.REQUEST_SCOPE);
    ^



    An error occurred at line: 4 in the jsp file: /CreaNuovo.jsp

    Generated servlet error:
    C:\Programmi\Tomcat5\work\Catalina\localhost\prova \org\apache\jsp\CreaNuovo_jsp.java:48: cannot resolve symbol
    symbol : class XMLFile
    location: package scrivilogs
    scrivilogs = new scrivilogs.XMLFile();
    ^
    3 errors


    org.apache.jasper.compiler.DefaultErrorHandler.jav acError(DefaultErrorHandler.java:127)
    org.apache.jasper.compiler.ErrorDispatcher.javacEr ror(ErrorDispatcher.java:351)
    org.apache.jasper.compiler.Compiler.generateClass( Compiler.java:415)
    org.apache.jasper.compiler.Compiler.compile(Compil er.java:458)
    org.apache.jasper.compiler.Compiler.compile(Compil er.java:439)
    org.apache.jasper.JspCompilationContext.compile(Js pCompilationContext.java:552)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:291)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:856)


    [*/CODE]

    E non capisco perchè...

    Non è che mi puoi dare una dritta eh?

    Grazie di nuovo
    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.