Sauvegarde XML en java

Je veux faire des sauveagardes en java.
J’ai plusieurs classes et je dois récup des données dans ces classes. Mais j’aimerais savoir comment je peux lier les balises qui se trouve dans chaque classe.
Merci.
J’utilise xerces DOM.

Tu pourrais nous donner plus d’infos, j’ai un peu de mal à comprendre ton objectif?

Tu veux sérialiser des objets dans du xml?

C’est un logiciel qui fais des simulation de site. Et l’objectif est de conserver des composants mis pour créer ce site. Donc, pour cela je dois créer un document XML qui conservera ces données.
Je veux créer ceci :



.
.
.




.
.
.

J’ai déja réussi a créer la balise designer, projet et les balises a l’intérieur de projet ( tout ceci se trouvait dans une meme classe).
Mais pour la balise site (qui se trouve dans une autre classe) j’arrive a pas la lier a la balise projet. Comment puisse-je faire?
Merci

J’ai toujours un peu de mal à voir

Dis-moi où je me trompe :

Dans ta 1ère classe, tu as une fonction

public Node genereXML() {...}

qui te renvoie le noeud racine (designer)

Dans ta 2nde classe, tu as une fonction équivalente qui te renvoie le noeud racine (site)

Ca ne marche pas un truc comme ça :

Node rootNode = objetClasse1.genereXML();
rootNode.appendChild(objetClasse2.genereXML());

ça c’est dans ma première classe :
private String tmpName;

private String tmp;

public FileOutputStream outFic;

public java.io.Writer writer;

public PrintWriter fOut;

public Document document;

public Element ELTdesigner ;

/** sauvegarde dans le fichier fichierProjet l’ensemble des variables du projet */
public void saveProjet() throws Exception, IOException {
try {
// confirmation apportee par l’utilisateur
int confirmation = JOptionPane.YES_OPTION;
if(fichierProjetSaisi.booleanValue()) {
File fichier = new File(fichierProjet.getAbsolutePath());

    // si le fichier existe déja, on demande à l'utilisateur s'il desire
    // l'ecraser
    if(fichier.exists()) {
      confirmation = JOptionPane.showConfirmDialog(
          EditProjetPanel.getEditProjetPanel(),
          "Voulez-vous écraser " + fichier.getCanonicalFile(),
          "Le fichier projet existe déjà",
          JOptionPane.YES_NO_CANCEL_OPTION,
          JOptionPane.QUESTION_MESSAGE
          );

      // si l'utilisateur a confirme, on enregistre
    }

    if(confirmation == JOptionPane.YES_OPTION) {
            fichier.createNewFile();

           FileOutputStream outFic = new FileOutputStream(fichier);

            java.io.Writer writer = new OutputStreamWriter(outFic, "UTF8");
            PrintWriter fOut = new PrintWriter(writer);

            Document document = new DocumentImpl();

            Element ELTdesigner = document.createElement("DESIGNER");
            Element ELTprojet = document.createElement("PROJET");


            Element ELTprjStraton = document.createElement("PrjStraton");
            String sProjetStratonSaisi = "";
            if(projetStratonSaisi.booleanValue())
              sProjetStratonSaisi = "true";
            else
              sProjetStratonSaisi = "false";
            ELTprjStraton.appendChild(document.createEntityReference( (String) sProjetStratonSaisi));
            ELTprojet.appendChild(ELTprjStraton);

            Element ELTprojetStraton = document.createElement("ProjetStraton");
            if(projetStratonSaisi.booleanValue()){
              String tmpName = "";
              for (int i=0; i<projetStraton.length(); i++){
                String tmp = "";
                if(projetStraton.charAt(i) == '\\'){
                  tmp = "8888";
                  tmpName += tmp;
                }else if(projetStraton.charAt(i) == ' '){
                  tmp = "7777";
                  tmpName += tmp;
                }else{
                  tmpName += projetStraton.charAt(i);
                }
              }
              if(tmpName == "")
          tmpName ="7777";
        ELTprojetStraton.appendChild(document.createEntityReference(tmpName));
        //ELTprojetStraton.appendChild(document.createEntityReference(projetStraton));


            }
            ELTprojet.appendChild(ELTprojetStraton);



            Element ELTFichierPrjSaisi = document.createElement("FichierProjetSaisi");
            String sFichierProjetSaise = "";
            if(fichierProjetSaisi.booleanValue())
              sFichierProjetSaise = "true";
            else
              sFichierProjetSaise = "false";
            ELTFichierPrjSaisi.appendChild(document.createEntityReference( (String) sFichierProjetSaise));
            ELTprojet.appendChild(ELTFichierPrjSaisi);

            Element ELTFichierProjet = document.createElement("FichierProjet");
            if(fichierProjetSaisi.booleanValue()){
              String tmpName = "";
              for (int i=0; i<fichierProjet.getAbsolutePath().length(); i++){
                String tmp1 = "";
                if(fichierProjet.getAbsolutePath().charAt(i) == '\\'){
                  tmp1 = "8888";
                  tmpName += tmp1;
                }else if(fichierProjet.getAbsolutePath().charAt(i) == ' '){
                  tmp = "7777";
                  tmpName += tmp1;
                }else{
                  tmpName += fichierProjet.getAbsolutePath().charAt(i);
                }
              }
              if(tmpName == "")
          tmpName ="7777";
              ELTFichierProjet.appendChild(document.createEntityReference(tmpName));
            }
            ELTprojet.appendChild(ELTFichierProjet);





            Element ELTFichierAtelierSaisi = document.createElement("FichierAtelierSaisi");
            String sFichierAtelierSaisie = "";
            if(fichierAtelierSaisi.booleanValue())
              sFichierAtelierSaisie = "True";
            else
              sFichierAtelierSaisie = "False";
            ELTFichierAtelierSaisi.appendChild(document.createEntityReference( (String) sFichierAtelierSaisie));
            ELTprojet.appendChild(ELTFichierAtelierSaisi);

            Element ELTFichierAtelier = document.createElement("FichierProjet");
           if(fichierProjetSaisi.booleanValue()){
             String tmpName = "";
             for (int i=0; i<fichierAtelier.getAbsolutePath().length(); i++){
               String tmp = "";
               if(fichierAtelier.getAbsolutePath().charAt(i) == '\\'){
                 tmp = "8888";
                 tmpName += tmp;
               }else if(fichierAtelier.getAbsolutePath().charAt(i)== ' '){
                 tmp = "7777";
                 tmpName += tmp;
               }else{
                 tmpName += fichierProjet.getAbsolutePath().charAt(i);
               }
             }
  if(tmpName == "")
          tmpName ="7777";
  ELTFichierAtelier.appendChild(document.createEntityReference(tmpName));

           }
           ELTprojet.appendChild(ELTFichierAtelier);






            Element ELTDirPrjSaisi = document.createElement("DirProjetSaisi");
            String sdirProjet="";
            if(dirProjetSaisi.booleanValue())
              sdirProjet="true";
            else
              sdirProjet="false";
              ELTDirPrjSaisi.appendChild(document.createEntityReference((String)sdirProjet));
            ELTprojet.appendChild(ELTDirPrjSaisi);

            Element ELTDirPrj = document.createElement("ProjetStraton");
            if(projetStratonSaisi.booleanValue()){
              String tmpName = "";
              for (int i=0; i<dirProjet.length(); i++){
                String tmp = "";
                if(dirProjet.charAt(i) == '\\'){
                  tmp = "8888";
                  tmpName += tmp;
                }else if(dirProjet.charAt(i) == ' '){
                  tmp = "7777";
                  tmpName += tmp;
                }else{
                  tmpName += dirProjet.charAt(i);
                }
              }
              if(tmpName == "")
          tmpName ="7777";
              ELTDirPrj.appendChild(document.createEntityReference(tmpName));
              //ELTprojetStraton.appendChild(document.createEntityReference(projetStraton));
            }
            ELTprojet.appendChild(ELTDirPrj);






            Element ELTNomPrjSaisi=document.createElement("NomProjet");
            String snomProjet="";
            if(dirCompoSaisi.booleanValue())
              snomProjet="true";
            else
              snomProjet="False";
              ELTNomPrjSaisi.appendChild(document.createEntityReference(snomProjet));
            ELTprojet.appendChild(ELTNomPrjSaisi);

            Element ELTNomPrj = document.createElement("ProjetStraton");
            if(projetStratonSaisi.booleanValue()){
              String tmpName = "";
              for (int i=0; i<nomProjet.length(); i++){
                String tmp = "";
                if(nomProjet.charAt(i) == '\\'){
                  tmp = "8888";
                  tmpName += tmp;
                }else if(nomProjet.charAt(i) == ' '){
                  tmp = "7777";
                  tmpName += tmp;
                }else{
                  tmpName += nomProjet.charAt(i);
                }
              }
              if(tmpName == "")
          tmpName ="7777";
              ELTNomPrj.appendChild(document.createEntityReference(tmpName));
              //ELTprojetStraton.appendChild(document.createEntityReference(projetStraton));
            }
            ELTprojet.appendChild(ELTNomPrj);






            Element ELTDirCompoSaisi=document.createElement("dirCompoSaisi");
            String sdirCompo="";
            if(dirCompoSaisi.booleanValue())
              sdirCompo="true";
            else
              sdirCompo="false";
              ELTDirCompoSaisi.appendChild(document.createEntityReference((String)sdirCompo));
            ELTprojet.appendChild(ELTDirCompoSaisi);


            Element ELTDirCompo = document.createElement("ProjetStraton");
          if(projetStratonSaisi.booleanValue()){
            String tmpName = "";
            for (int i=0; i<dirCompo.length(); i++){
              String tmp = "";
              if(dirCompo.charAt(i) == '\\'){
                tmp = "8888";
                tmpName += tmp;
              }else if(dirCompo.charAt(i) == ' '){
                tmp = "7777";
                tmpName += tmp;
              }else{
                tmpName += dirCompo.charAt(i);
              }
            }
            if(tmpName == "")
          tmpName ="7777";
            ELTDirCompo.appendChild(document.createEntityReference(tmpName));
            //ELTprojetStraton.appendChild(document.createEntityReference(projetStraton));
          }
          ELTprojet.appendChild(ELTDirCompo);


          ELTdesigner.appendChild(ELTprojet);
          document.appendChild(ELTdesigner);

          OutputFormat format = new OutputFormat(document); //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(document.getDocumentElement());

          fOut.write(stringOut.toString());
          fOut.close();
          fichierProjet = fichier;
        }



        // une fois le projet sauve, le site peut être edite

      }

    } catch(Exception e) {
      throw monException;
      }
    }

ça c’est ce que j’ai mis dans ma deuxième classe :
private Element ELTdesigner ;

public PrintWriter fOut;

public FileOutputStream outFic;

/** sauvegarde du site
*

  • @throws IOException
  • */
    public void saveSite() throws IOException {
// on test si le fichier est bien defini au niveau du projet
if(instanceProjet.getFichierAtelierSaisi() == false) {
  instanceFenProjet.setLabelEtatDeSimsed(SAUVEGARDE_IMPOSSIBLE);
  instanceFenProjet.setLabelEtatDeSimsed(FICHIER_SITE_INDEFINI);
  /*JOptionPane.showMessageDialog(Ihm.getihm(),
                                "Site file not define",
                                "CANT'T SAVE PROJECT",
                                JOptionPane.WARNING_MESSAGE);*/
}

else {
  // creation d'un flux de sortie a partir du fichier de sauvegarde

  File fichierAtelier = instanceProjet.getFichierAtelier();
 /*  FileOutputStream outFic = new FileOutputStream(fic);

   java.io.Writer writer = new OutputStreamWriter(outFic, "UTF8");
   PrintWriter fOut = new PrintWriter(writer);


   Document document= new DocumentImpl();

*/
Document document = Projet.getInstanceProjet().document;

/*
File fichierAtelier = instanceProjet.getFichierAtelier();
FileOutputStream ostream = new FileOutputStream(fichierAtelier);
ObjectOutputStream out = new ObjectOutputStream(ostream);
*/
// le fichier est reinitialise
fichierAtelier.createNewFile();

Element ELTSite = document.createElement(“SITE”);
Projet.getInstanceProjet().ELTdesigner.appendChild(ELTSite );

Element ELTComposant = document.createElement(“COMPOSANT”);
ELTSite.appendChild(ELTComposant);

// on sauvegarde le vecteur de composant
vectComposant.save(document, ELTSite);
//on sauvegarde l’ensemble des connexions
Element ELTConnexion = document.createElement(“CONNEXION”);
ELTSite.appendChild(ELTConnexion);

  /*listeConnexion.save(out);*/
  if(Site.getAutomate() != 2){
    // on sauvegarde la liste des entrees/sorties Straton reliee
    Element ELTESStraton = document.createElement("ENTREESORTIESSTRATON");
    ELTComposant.appendChild(ELTESStraton);

    vectComposant.save(document, ELTSite);
  }
  else {
    // on sauvegarde la liste des entrees/sorties Isagraf reliee
    Element ELTESIsagraf = document.createElement("ENTREESORTIEISAGRAF");
    ELTComposant.appendChild(ELTESIsagraf);
    vectComposant.save(document, ELTSite);
  }
  OutputFormat format = new OutputFormat(document); //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(document.getDocumentElement());

           fOut.write(stringOut.toString());

   //Vide le flux de sortie et force la sortie de toutes les données stockées dans un tampon.
   fOut.flush();
  // on ferme le flux de sortie
   fOut.close();
}
//Ihm.changePermissionMode(Ihm.SAVE_SITE);

}

Heu… Tu sauves sur le disque et ensuite tu souhaites ajouter le “site”?

Au passage 2 ou 3 petits trucs sur ton code :

  • Evite de passer directement des strings comme “7777”… Crée une variable static final que tu réutilises partout… Si tu te plantes à la saisie, le compilateur te préviendra
  • Cela m’etonnerais que ton code fasse exactement ce que tu souhaites
if (tmpName == "")

renverra toujours faux

  • Mieux vaut utiliser des variables avec des noms explicites que des noms faciles à taper… [tmp]

oki mais pour les 7777 j’ai mis ça car le parseur lit pas la ponctuation et les espaces donc on a remplacé par des 7.

Autrement j’ai toujours pas trouvé pourquoi ce que j’ai mis dans la 2ème classe ne marchais pas.
J’arrive toujours a écrire dans le document XML.

Voici quelques API issues de www.apache.org qui permettent de manipuler des fichiers XML et de faire du mapping Java-XML

http://jakarta.apache.org/commons/betwixt/
http://jakarta.apache.org/commons/configuration/
http://jakarta.apache.org/commons/digester/

MaDe