Bonjour à tous,

j'ai des difficultés pour parser avec JDOM mon fichier xml ci-dessous :

Code : 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
 
<?xml version="1.0" encoding="UTF-8"?>
<produits>
  <produit nom="produit1">
  	<type>compote</type>
    	<melanges>
  		<melange id="1">
  			<fruit>marron</fruit>
  			<legume>carotte<legume>
  		</melange>
  	</melanges>
  </produit>
  <produit nom="produit2">
	<type>compote</type>
  	<melanges>
  		<melange id="1">
  			<fruit>pommme</fruit>
  			<legume>carotte<legume>
  		</melange>
  		<melange id="2">
  			<fruit>poire</fruit>
  			<legume>haricot</legume>
  		</melange>
  	</melanges>
  </produit>
</produits>

Je code une méthode qui prend en argument le nom du produit et qui doit
renvoyer en sortie un vector.
Je voudrais que ce vector contienne lui-même 2 vectors.

Exemple : si on reçoit en argument "produit2", le vector contient :
[ [1,pommme,carotte] [2,poire,haricot] ]

Voici le code que j'utilise pour cela :

Code : 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
30
31
32
33
34
35
36
37
38
39
40
41
 
private static org.jdom.Document produitListe;
private static Element root;
 
private Vector parse(Vector v, String nomProduit) 
{
	SAXBuilder sxb = new SAXBuilder();
	produitListe = sxb.build(new File("config/produitListe.xml"));
 
	//Pour parcourir les différents produits
	root = produitListe.getRootElement();
	List listeProduit = root.getChildren("produit");
	Iterator i = listeProduit.iterator();
 
	//Pour parcourir les différents mélanges d'un produit
	Element produit = root.getChild("produit");
	Element melanges = (Element) produit.getChild("melanges");
	List listeMelanges = melanges.getChildren("melange");
	Iterator j = listeMelanges.iterator();
 
	while (i.hasNext())
	{
		Element element = (Element) i.next();
 
		if(element.getAttributeValue("nom").equals(nomProduit))
		{		    	
		   	while (j.hasNext()) 
		    	{				 
		    		Element element2 = (Element) j.next();
				Vector w = new Vector();
 
				w.addElement((String) element2.getAttributeValue("id"));
				w.addElement((String) element2.getChild("fruit").getText());
				w.addElement((String) element2.getChild("legume").getText());
				v.addElement(w);
		    	}
		 }
	}
 
	return v;
}
Pour l'instant, ma méthode ne renvoie qu'un vecteur qui contient [[1, marron, carotte]] lorsque je lui met "produit2" en argument, ce qui est faux. Pourriez-vous m'indiquer comment obtenir en sortie le vecteur que j'ai indiqué ci-dessus ?

Merci.