IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Parser une collection [XStream]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut Parser une collection
    Bonjour,

    J'ai un petit soucis avec le parsing XStream (version 1.2).

    J'ai besoin de parser une collection non englobée. Je m'explique...

    Par exemple j'ai le fichier suivant :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <classe>
    	<niveau>CM1</niveau>
    	<eleve>
    		<nom>DUPONT</nom>
    		<prenom>Romain</prenom>
    	</eleve>
    	<eleve>
    		<nom>SIMPSON</nom>
    		<prenom>Lisa</prenom>
    	</eleve>
    </classe>

    Et la classe Classe suivante :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import java.util.Set;
    import com.thoughtworks.xstream.annotations.XStreamAlias;
     
    @XStreamAlias("classe")
    public class Classe {
    	@XStreamAlias("niveau")
    	private String niveau;
     
    	@XStreamAlias("")
    	private Set<Eleve> eleves;
     
    	public String getNiveau() {
    		return niveau;
    	}
     
    	public void setNiveau(String niveau) {
    		this.niveau = niveau;
    	}
     
    	public Set<Eleve> getEleves() {
    		return eleves;
    	}
     
    	public void setEleves(Set<Eleve> eleves) {
    		this.eleves = eleves;
    	}
    }

    Ainsi que la classe Eleve :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import java.util.Set;
    import com.thoughtworks.xstream.annotations.XStreamAlias;
     
    @XStreamAlias("eleve")
    public class Classe {
    	@XStreamAlias("nom")
    	private String nom;
     
    	@XStreamAlias("prenom")
    	private String prenom;
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getPrenom() {
    		return prenom;
    	}
     
    	public void setPrenom(String prenom) {
    		this.prenom = prenom;
    	}
    }

    Et voici l'opération de désérialisation :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    try {
    	// Instanciation de la classe XStream
    	XStream xstream = new XStream(new DomDriver());
     
    	// Redirection du fichier vers un flux d'entrée fichier
    	InputStream in = new FileInputStream(new File(fichier));
     
    	try {
    		// A partir de XStream 1.3, il faut utiliser :
    		// xstream.processAnnotations(Classe.class);
    		// Avant XStream 1.3, il faut utiliser :
    		Annotations.configureAliases(xstream, Classe.class);
     
    		// Désérialisation du fichier vers un nouvel objet
    		Classe classe = (Classe) xstream.fromXML(in);
     
    		// Traitement classe...
    	}
    	finally {
    		// On s'assure de fermer le flux quoi qu'il arrive
    		in.close();
    	}
    }
    catch (FileNotFoundException e) {
    	e.printStackTrace();
    }
    	catch (IOException e) {
    	e.printStackTrace();
    }

    Mais je n'arrive pas à parser la collection sans englober les élèves dans une autre balise, comme ceci par exemple :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <classe>
    	<niveau>CM1</niveau>
    	<eleves>
    		<eleve>
    			<nom>DUPONT</nom>
    			<prenom>Romain</prenom>
    		</eleve>
    		<eleve>
    			<nom>SIMPSON</nom>
    			<prenom>Lisa</prenom>
    		</eleve>
    	</eleves>
    </classe>

    Ce que je ne veux pas faire Une idée ?

  2. #2
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    J'ai fini par trouver la solution.

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @XStreamImplicit(itemFieldName="Valeur")
    @XStreamContainedType
    private Set<Valeur> valeurs;

    @XStreamImplicit permet de dire que la collection est implicite donc non englobée par une autre balise.
    @XStreamContainedType permet de dire qu'il faut utiliser le type contenu dans la collection. Par défaut, le type pris sera String.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] parser une String pour en faire un document XML
    Par Fladnag dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 29/03/2004, 11h04
  2. [VB6] Sauvegarder une collection d'objets
    Par Sayagh dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 19/09/2003, 11h58
  3. Comment créér une collection sous Delphi
    Par PsyKroPack dans le forum Langage
    Réponses: 6
    Dernier message: 11/02/2003, 13h20
  4. [VB6] Modifier la clé d'un élément d'une collection
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h49
  5. [langage] Continuer a parser une ligne
    Par D[r]eadLock dans le forum Langage
    Réponses: 5
    Dernier message: 30/09/2002, 18h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo