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

cs_ajan 35 Messages postés jeudi 30 juin 2005Date d'inscription 13 avril 2007 Dernière intervention - 4 août 2006 à 13:55 - Dernière réponse : cs_ajan 35 Messages postés jeudi 30 juin 2005Date d'inscription 13 avril 2007 Dernière intervention
- 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
deemon 13 Messages postés vendredi 16 avril 2004Date d'inscription 24 février 2009 Dernière intervention - 5 août 2006 à 01:47
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.

Merci deemon 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de deemon
cs_laurent1024 987 Messages postés mardi 31 mai 2005Date d'inscription 30 août 2012 Dernière intervention - 4 août 2006 à 14:37
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
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 4 août 2006 à 15:25
0
Merci
Il te suffit de créer une classe qui implemente l'interface serializable.
Commenter la réponse de cs_DARKSIDIOUS
super_toinou 764 Messages postés mardi 25 mai 2004Date d'inscription 8 mars 2011 Dernière intervention - 4 août 2006 à 15:36
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
Twinuts 5283 Messages postés dimanche 4 mai 2003Date d'inscription 22 octobre 2018 Dernière intervention - 4 août 2006 à 17:13
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
shaiulud 405 Messages postés mardi 18 décembre 2001Date d'inscription 15 juillet 2014 Dernière intervention - 4 août 2006 à 17:14
0
Merci
XStream est aussi une solution élégante, rapide à implémenter.
Commenter la réponse de shaiulud
super_toinou 764 Messages postés mardi 25 mai 2004Date d'inscription 8 mars 2011 Dernière intervention - 4 août 2006 à 17:22
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
deemon 13 Messages postés vendredi 16 avril 2004Date d'inscription 24 février 2009 Dernière intervention - 5 août 2006 à 01:49
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
cs_ajan 35 Messages postés jeudi 30 juin 2005Date d'inscription 13 avril 2007 Dernière intervention - 7 août 2006 à 09:40
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.