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 :

Problème pour parser un fichier XML [débutant] [JDOM]


Sujet :

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

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Par défaut Problème pour parser un fichier XML [débutant]
    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.

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    C'est normal c'est la liste de mélanges que tu ne crées pas correctement.
    Voilà le code corrigé :
    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
     
    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();
     
    	while (i.hasNext())
    	{
    		Element element = (Element) i.next();
    	//Pour parcourir les différents mélanges d'un produit
                 Element melanges = (Element) produit.getChild("melanges");
    	List listeMelanges = melanges.getChildren("melange");
    	Iterator j = listeMelanges.iterator();
     
    		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;
    }
    Au passage ne plus utiliser Vector, mais lui préférer des Collection comme ArrayList ...

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Par défaut
    ok merci.

    C'est sympa de m'avoir aidé.

    a+.

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

Discussions similaires

  1. Problème de balise pour parser un fichier xml
    Par gxlinks dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 15/07/2010, 16h10
  2. [DOM4J] Problème pour "parser" un fichier XML avec accents
    Par mlny84 dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 26/11/2007, 19h06
  3. Réponses: 7
    Dernier message: 23/07/2006, 20h01
  4. [C#] Problème pour lire un fichier xml
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/06/2006, 23h12
  5. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32

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