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 faireUne idée ?
Partager