Générer un fichier xml à aprtir d'une classe java

Résolu
cs_ajan Messages postés 35 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 13 avril 2007 - 4 août 2006 à 13:55
cs_ajan Messages postés 35 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 13 avril 2007 - 7 août 2006 à 09:40
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

deemon Messages postés 13 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 24 février 2009
5 août 2006 à 01:47
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.
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
4 août 2006 à 14:37
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 + "");

    }

}

++
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 août 2006 à 15:25
Il te suffit de créer une classe qui implemente l'interface serializable.
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
4 août 2006 à 15:36
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();
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
4 août 2006 à 17:13
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
0
shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
4 août 2006 à 17:14
XStream est aussi une solution élégante, rapide à implémenter.
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
4 août 2006 à 17:22
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
0
deemon Messages postés 13 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 24 février 2009
5 août 2006 à 01:49
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;
 }
}


 
0
cs_ajan Messages postés 35 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 13 avril 2007
7 août 2006 à 09:40
ç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 !)
0
Rejoignez-nous
A voir également