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

Messages postés
35
Date d'inscription
jeudi 30 juin 2005
Dernière intervention
13 avril 2007
- - Dernière réponse : cs_ajan
Messages postés
35
Date d'inscription
jeudi 30 juin 2005
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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
13
Date d'inscription
vendredi 16 avril 2004
Dernière intervention
24 février 2009
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de deemon
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
18
0
Merci
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 + "");

    }

}

++
Commenter la réponse de cs_laurent1024
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
108
0
Merci
Il te suffit de créer une classe qui implemente l'interface serializable.
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
764
Date d'inscription
mardi 25 mai 2004
Dernière intervention
8 mars 2011
11
0
Merci
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();
Commenter la réponse de super_toinou
Messages postés
5313
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
14 janvier 2019
99
0
Merci
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
Commenter la réponse de Twinuts
Messages postés
405
Date d'inscription
mardi 18 décembre 2001
Dernière intervention
15 juillet 2014
42
0
Merci
XStream est aussi une solution élégante, rapide à implémenter.
Commenter la réponse de shaiulud
Messages postés
764
Date d'inscription
mardi 25 mai 2004
Dernière intervention
8 mars 2011
11
0
Merci
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
Commenter la réponse de super_toinou
Messages postés
13
Date d'inscription
vendredi 16 avril 2004
Dernière intervention
24 février 2009
0
Merci
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;
 }
}


 
Commenter la réponse de deemon
Messages postés
35
Date d'inscription
jeudi 30 juin 2005
Dernière intervention
13 avril 2007
0
Merci
ç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 !)
Commenter la réponse de cs_ajan

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.