Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Java e JDom]: aggiungere elemento a xml

    Salve ragazzi,
    oggi sto affrontando un programmino relativamente semplice che però mi ha messo in difficoltà. Spiego meglio:
    io ho una classe Finestra, che ha al suo interno due JTextField, chiamate Path e Nome. in pratica io devo prendere il contenuto di queste due text e scriverle su un xml. uso JDOM. cliccando su un bottone "ok" avviene la scrittura su xml e poi mi si presenta la domanda se voglio inserire un nuovo record. quindi pulisco le text e sono pronte all'uso. le riempio di nuovo e quando vado a cliccare su ok, in pratica mi riscrive l'xml e mi cancella il record precedente!!. a me servirebbe invece creare una nuova riga, mantenendo la riga precedente!! vi posto il codice, sono sicuro che è una bazzecola ma mi sfugge!!

    codice:
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.*;
    import org.jdom.*;
    import org.jdom.output.XMLOutputter;
    import java.io.IOException;
    import java.sql.SQLException;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JTextField;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    
    /**
     *
     * @author Nicholas
     */
    class CreaXML extends JFrame{
        FileLog flog=new FileLog();
        private JLabel pathFile = new JLabel("Path:");
        private JTextField txtPath = new JTextField(10);
        private JLabel nomeFile = new JLabel("Nome:");
        private JTextField txtFile = new JTextField(10);
        private JButton ok = new JButton("Ok");
        private JButton annulla = new JButton("Annulla");
        private JFrame frame = new JFrame();
        private boolean primoElemento=true;
        FileOutputStream out;
        XMLOutputter serializer;
    
    
        CreaXML(){
            frame.setTitle("Crea Properties");
            frame.setLocation(0, 0);
            frame.setLayout(new GridLayout(3,2,10,10));
    
            frame.add(pathFile);
            frame.add(txtPath);
    
            frame.add(nomeFile);
            frame.add(txtFile);
    
            frame.add(ok);
            frame.add(annulla);
    
            //frame.setUndecorated(true);
            frame.pack();
            frame.setVisible(true);
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            });
            annulla.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);
                }
            });
            ok.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                     boolean bRet=false;
                      //creo elemento Programmazione
                      Element elementoRadice= new Element("ElencoFile");
                      //creo elemento Titolo
                      Element elementoTitolo=new Element("File");
                      //setto il valore con quello presto da path
                      elementoTitolo.setAttribute("PathFile",txtPath.getText());
                      //setto il valore con quello preso da nome
                      elementoTitolo.setAttribute("NomeFile",txtFile.getText());
                      //aggiungo a elemento radice elemento titolo
                      elementoRadice.addContent(elementoTitolo);
                      //creo document
                      Document doc = new Document(elementoRadice);
    
                      try {
                          FileOutputStream out = new FileOutputStream("Elementi.xml");
                          XMLOutputter serializer = new XMLOutputter();
                          serializer.output(doc, out);
                          out.flush();
                          out.close();
                          bRet=true;
                          //se arriva qui ha scritto correttamente
                          flog.scriviLog(0,"Elementi scritto correttamente");
                          //System.out.println("XML TITOLI CREATO");
                      }
                      catch (IOException ex) {
                            //System.out.println("ERRORE XML TITOLI");
                            bRet=false;
                            flog.scriviLog(1,ex.getMessage()+" Elementi");
                            return;
                      }
                      if(bRet==true){
                          //mi chiede se voglio inserire un nuovo elemento
                          String nextEle=JOptionPane.showInputDialog("XML Elementi scritto correttamente. \n Inserire un altro elemento? (y/n)");
                          //se si
                          if(nextEle.equalsIgnoreCase("y")){
                              //chiude vecchia finestra
                              frame.dispose();
                              //riparte
                              new CreaXML();
                          }
                          else{
                              //altrimenti chiude finestra
                              frame.dispose();
                              //lancia altro programma
                              CopiaFile cf=new CopiaFile();
                              cf.connettiFTP();
                          }
                      }
                      else{
                          JOptionPane.showMessageDialog(rootPane, "Errore: Impossibile scrivere XML Elementi");
                          System.exit(0);
                      }
                }
            });
        }
        
        public static void main(String[]args) throws IOException, JDOMException, TransformerConfigurationException, TransformerException, SQLException{
            new CreaXML();
        }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java e JDom]: aggiungere elemento a xml

    Originariamente inviato da Aramil89
    quando vado a cliccare su ok, in pratica mi riscrive l'xml e mi cancella il record precedente!!
    Per come l'hai fatto .... sì, ovvio. Perché in quel actionPerformed fai tutto quanto, crei il Document, inserisci quello che ti serve, serializzi (in senso generale di scrivere) su file e basta. Terminato il actionPerformed "abbandoni" tutti gli oggetti e l'unica cosa che ti rimane ... è il file!

    Le possibilità sono 2: o ad ogni click su ok rileggi/riparsi il file per avere un Document, quindi inserisci e riscrivi il file (e poi puoi "perdere" tutti gli oggetti tranquillamente) ... oppure tieni "in vita" il Document per tutto il tempo che ti serve e al click semplicemente inserisci e riscrivi il file.

    E se vuoi fare il tutto in modo "pulito", spezza le cose. Tutta la logica di gestione del documento XML non centra nulla con la gestione del JFrame in sè .... quindi separa, fai almeno una classe a parte es. ScrittoreElementiXml.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao Andbin scusami se ti rispondo ora ma sono stato il week end lontano la pc vari XD sono riuscito a risolvere venerdì stesso poco prima delle sette! Ti ringrazio comunque per la risposta e per i consigli^^ cerco di semplificare ancora oggi!

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.