Générer un fichier xml à aprtir d'une classe java [Résolu]

Signaler
Messages postés
35
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
13 avril 2007
-
cs_ajan
Messages postés
35
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonjour, je voualis savoir s'il existe une méthode simple pour générer un fichier xml à partir d'une classe java. Il y aurait dans ce fichier tous les attributs de la classe et leur valeur

9 réponses

Messages postés
13
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
24 février 2009

je voulais publier un code à ce sujet mais les classes sont bcp trop volumineuse enfait j'ai utilisé un projet déja publié nomé Xstream.
voici une partie du code permettant de generer un fichier xml.

// des imports utils pour la serialisation xml
import com.thoughtworks.xstream.XStream;


// import pour les entrées sorties du fichier
import java.io.FileOutputStream;
import java.io.PrintStream;


import java.io.FileInputStream;
import java.io.FileReader;
import java.io.ObjectInputStream;
import java.io.BufferedReader;

// import des classes noyau en l'occurence : personne et groupe
import noyau.*;


public class Main
{
 UnePersonne laFille,leGarcon;
 UnGroupe leGroupe;
 
 XStream leFlux;
 
 FileOutputStream leFichier;
 PrintStream lEcrivain;
 
 FileInputStream leFile;


 public static void main(String[] args)
 {
  new Main();
 }
 
 public Main()
 {
  laFille = new UnePersonne("GuGu");
  leGarcon = new UnePersonne("Adnane");
  
// initialisation du flux xstream
  leFlux = new XStream();

// mise en place des alias de chaque classe ( les balises )
  leFlux.alias("personne",UnePersonne.class);
  leFlux.alias("groupe",UnGroupe.class);

// regrouper les personnes dans un groupe
  leGroupe = new UnGroupe();
  leGroupe.ajouter(laFille);
  leGroupe.ajouter(leGarcon);
  
// serialisation : le résulat est un string qui sera ensuite enregistré sur fichier
// on peut s'arreter ici et mettre un system.out.println pour afficher le resultat

  String laChaine = leFlux.toXML(leGroupe);

//   récuperation des données serialisées ( sans lecture du fichier )
  leGroupe = (UnGroupe) leFlux.fromXML(laChaine);

// reserialisation afin des les afficher :D
  laChaine = leFlux.toXML(leGroupe);
  
   // ecriture sur fichier
  try
  {
   leFichier = new FileOutputStream("laListe.xml",true);
   
   lEcrivain = new PrintStream(leFichier);
   lEcrivain.println(laChaine);
   lEcrivain.close();
  }
  
   catch(Exception e)
   {
    e.printStackTrace();
   }
   
// lecture apartir du fichier
  try
  {   
   
   BufferedReader leTampon = new BufferedReader(new FileReader("laListe.xml"));
   
   laChaine = leTampon.readLine();
   String laTmp ="";
   laTmp = laChaine+'\n';
   
    while(leTampon.ready())
    {
      
     laChaine = leTampon.readLine();
     laTmp += laChaine+'\n';
     
    }
    
    System.out.println(laTmp);
       
    leGroupe = (UnGroupe)leFlux.fromXML(laTmp);
     
    String uneChaine = leFlux.toXML(leGroupe);
    
  }
  
   catch(Exception e)
   {
    e.printStackTrace();
   }
  
 }
}

j'espere que le code est assez claire, franchement je prefere cette méthode aux autres utilisant le Sax le jdom et d'autres package.
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
14
Une solution simple est de creer une fonction qui revoient une string avec les balises

Exemple

class A

{

    int a;

    float b;

    public String toXML(){

       return ("" + a + "" + b + "");

    }

}

++
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
87
Il te suffit de créer une classe qui implemente l'interface serializable.
Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
6
voit la classe XMLEncodeur
exemple de sun
XMLEncoder e = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("Test.xml")));
e.writeObject(new JButton("Hello, world"));
e.close();
Messages postés
5341
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 décembre 2019
89
Salut,

petit complement par rapport à la solution de [auteurdetail.aspx?ID=283222 super_toinou]qui est très bien sur des petit objets, ne l'utilise jamais sur des objets complex comme JTable, JTree ou autre usine à gaze enfin sauf si tu as :
 1 de lespace disque
 2 du temps devant toi (en effet sur des objet graphique complex ça rame à mort)

voilou.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
405
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
15 juillet 2014
17
XStream est aussi une solution élégante, rapide à implémenter.
Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
6
il est vrai qu XStream est préférable si ajan t as le temps préfère cette solution (mais pour un ptit codage rapide a l arrache ca évite de l intégrer)
++ Toinou
Messages postés
13
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
24 février 2009

j'ai oublié d'incorporer les classes " noyau ".

// classe UnGroupe
package noyau;


import java.util.Vector;


public class UnGroupe
{
 Vector laListe;
 
 public UnGroupe()
 {
  laListe = new Vector();
 }
 
 public UnGroupe(UnePersonne telPersonne)
 {
  laListe = new Vector();
  laListe.addElement(telPersonne);
 }
 
 public void ajouter(UnePersonne telPersonne)
 {
  laListe.addElement(telPersonne);
 }
 
 public int laTaille()
 {
  return laListe.size();
 }

}

// classe UnePersonne

package noyau;


public class UnePersonne
{
 String leNom;
 
 public UnePersonne()
 {
  leNom = "Anonyme";
 }
 
 public UnePersonne(String telNom)
 {
  leNom = telNom;
 }
}


 
Messages postés
35
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
13 avril 2007

ça m'a l'air pas mal ça deemon !! Je vais tester ça, mais je pense que c'est bien ce que je cherche (dès que je suis sure, j'accept la réponse !)


 


Pour super_toinou, t'as raison, j'essaie d'éviter de faire du code à l'arrache, la politique qualité de ma boite (je suis en stage) est super stricte, donc j'ai besoin d'un code propre, qui bouffe pas trop non plus !)