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 :

[JDOM] Parcourir fichier XML


Sujet :

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

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut [JDOM] Parcourir fichier XML
    Bonjour à tout le monde !

    J'ai un petit problème pour un projet, je m'explique :

    j'ai une base de données qui possède des téléphones et chaque téléphone a des caractéristiques. Mon fichier XML répertorie tout cela également. Maintenant j'essaye de vérifier si les informations présentent dans mon fichier XML sont bien les mêmes qui sont dans ma base de données. Pour cela j'utilise l'API JDOM qui me permet de parser un document XML.

    Une méthode me renvoie la marque et le modèle ainsi que les caractéristiques du 1er téléphone de mon document XML. Etant donné qu'à chaque fois que j'appelle cette méthode, j'effectue un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    racine = document1.getRootElement();
    Du ce fait, je reviens au début de mon document et le téléphone ne change pas (boucle infinie)... je souhaiterai passer au noeud suivant mais comment faire pour partir du dernier "noeud" utilisé et non du début ?

    Si vous avez des questions, n'hésitez surtout pas, merci par avance de votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Par défaut
    tu devrais poster un bout de ton document XML et le code de ta méthode.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    Voici le code de la méthode :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    	public String[] consulter()
    	{
    		String features=null, child=null;
    		Iterator i;
    		List listPhones;
    	 	Element courant;
    	 	boolean test = false;
    	 	String[] chaine = new String[2];
    	 	int ind;
     
    		//On initialise un nouvel élément racine avec l'élément racine du document.
    		racine = document1.getRootElement();
     
     
     
    		//On prend comme noeud device
    		listPhones = racine.getChildren("device");
     
    		//On crée un Iterator sur notre liste
    		i = listPhones.iterator();
    		while(i.hasNext())
    		{
    		   //On recrée l'Element courant à chaque tour de boucle afin de
    		   //pouvoir utiliser les méthodes propres aux Element comme :
    		   //selectionner un noeud fils, modifier du texte, etc...
    		   courant = (Element)i.next();       
    		   child = courant.getChild("identifier").getText();
    		   if(!child.equals(""))
    		   {
    			   chaine[0] = child;
    			   try
    			   {
    				   features = courant.getChild("features").getText();   
    				   chaine[1] = features;
    				   return chaine;
    			   }
    			   catch(Exception e){}
    		    }
    		    else
    		    {
    		    	test = false;
    		    }
    		 }
    		 if(test == false)
    		 {
    			 //On initialise un nouvel élément racine avec l'élément racine du document.
    			 racine = document2.getRootElement();   	    
    			 listPhones = racine.getChildren("device");
     
    			 //On crée un Iterator sur notre liste
    			 i = listPhones.iterator();
    			 while(i.hasNext())
    			 {
    				 //On recrée l'Element courant à chaque tour de boucle afin de
    			   	 //pouvoir utiliser les méthodes propres aux Element comme :
    			   	 //selectionner un noeud fils, modifier du texte, etc...
    			   	 courant = (Element)i.next();
     
    			   	 child = courant.getChild("identifier").getText();
    				 try
    				 {
    					 features = courant.getChild("features").getText();
    				 }
    				 catch(Exception e){}
    			  }
    		 }
    		return chaine;	 
    	 }

    et voici une partie de mon fichier XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <device>
    	<identifier>Samsung/SGH-Z560</identifier>
    	<features>hasACamera</features>
    ...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 7
    Par défaut
    ton fichier xml à la forme

    <device>
    infomartion
    </device>
    <device>
    infomartion
    </device>
    ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    Euh, je ne m'y connais pas trop en XML mais le code que j'ai indiqué ci-dessus ne t'éclaire pas sur la question que tu me poses ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 7
    Par défaut
    pourrais tu m'ajouter le xml pour 2 devices s'il te plait

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <device>
    	<identifier>Samsung/SGH-Z560</identifier>
    	<features>hasACamera</features>
    ... (ici se trouve d'autres informations mais pas utile pour mon problème)
    </devices>
     
    <device>
    	<identifier>Samsung/SGH-Z560c</identifier>
    	<features>hasACamera</features>
    ... (ici se trouve d'autres informations mais pas utile pour mon problème)
    </devices>

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 7
    Par défaut
    il te met un probleme car il te faut une balise qui englobe tes devices

    donc par exemple :
    <listdevice>
    <device>
    <identifier>Samsung/SGH-Z560</identifier>
    <features>hasACamera</features>
    ... (ici se trouve d'autres informations mais pas utile pour mon problème)
    </devices>

    <device>
    <identifier>Samsung/SGH-Z560c</identifier>
    <features>hasACamera</features>
    ... (ici se trouve d'autres informations mais pas utile pour mon problème)
    </devices>
    </listdevice>
    tu ouvre un device et tu ferme un devices cela va pose probleme egalement

    pour une baluse ouverture il faut une balise fermattante

    donc un exemple de xml :
    <listdevice>
    <device>
    <identifier>Samsung/SGH-Z560</identifier>
    <features>hasACamera</features>
    ... (ici se trouve d'autres informations mais pas utile pour mon problème)
    </device>

    <device>
    <identifier>Samsung/SGH-Z560c</identifier>
    <features>hasACamera</features>
    ... (ici se trouve d'autres informations mais pas utile pour mon problème)
    </device>
    </listdevice>
    j'espere que cela va résoudre ton problème
    si je me suis mal expliqué ou si tu ne comprend pas n'hésite pas à me demander.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    Pardon, oui en effet, il y a une balise qui englobe le tout.. "<devices>"

    Par contre, le problème n'est pas là, c'est plutôt dans le code qu'il se trouve. En fait à chaque fois je reparcours tout le document alors que je voudrais repartir du dernier device lu pour passer au suivant.

    Est ce clair ?

  10. #10
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    pourquoi tu ne fais pas une méthode qui stockerait racine ( attribut de ta classe) et te l'initialiserait s'il est null ? et qui te ferait l'étape de récupération des device ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    Citation Envoyé par miloux32 Voir le message
    pourquoi tu ne fais pas une méthode qui stockerait racine ( attribut de ta classe) et te l'initialiserait s'il est null ? et qui te ferait l'étape de récupération des device ?
    Comment je peux dire au fichier XML de démarrer à tel device ? l'attribut racine contiendra toujours la racine du document donc le début du fichier XML non ?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    Pour faire simple :

    Je veux que mon élément racine ne contienne que la racine du document XML qu'en début de code. Une fois un tour de boucle effectué, je dois passer au téléphone suivant, or ici, ce n'est pas le cas (je recommence du début)


    => Passer au nœud suivant.

  13. #13
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    hello,
    Est ce que l'utilisation de jdom est un pré requis?
    Sinon tu peux utiliser l'api digester qui te permet de transformer ton fichier xml en 'grappe' d'objets. A partît de la tu pourras faire tes comparaisons plus facilement en redéfinissant certaines méthodes equals de tes objets.

  14. #14
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Salut,
    Je suis en train de lire des fichiers xml et de récupérer leur contenu, j'utilise cette méthode:

    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
     
    Element root = document.getRootElement();
     
    // ici on part du noeud EXPORT, c'est également le noeud racine
    xPath = XPath.newInstance("//EXPORT");
     
    //Je crée une liste qui contient tous les noeuds juste après EXPORT
    List exportResults = xPath.selectNodes(root);
     
    //Je crée un Iterator pour parcourir la List de noeuds
    Iterator iter1 = exportResults.iterator();
     
    // Je parcous cette liste	
    while (iter1.hasNext()) {
     
                 //Je récupère le noeud courant, exportType est un String qui 
                 // contiendra la valeur de l'argument contenu dans le noeud courant
                //s'appleant "type"
    	currentNodeExport = (Element) iter1.next();
    	xPath = XPath.newInstance("./@type");
    	exportType = xPath.valueOf(currentNodeExport);
     
                 xPath = XPath.newInstance(".//VERSION");
    	List versionResults = xPath.selectNodes(currentNodeExport);
    	Iterator iter2 = versionResults.iterator();
     
                //Je recommence juste après le noeud qui est après le noeud après EXPORT
    	while (iter2.hasNext()) {
    		currentNodeVersion = (Element) iter2.next();
    		xPath = XPath.newInstance("./@name");
    		version = xPath.valueOf(currentNodeVersion);
     
    		xPath=XPath.newInstance("./@listPN");
    	            fullCoreSoftware=xPath.valueOf(currentNodeVersion);
    		coreSoftware=getSimpleTitle(fullCoreSoftware);
    Bon, il te faudra l'adapter, mais voilà une façon de faire qui parcours au finale la totalité de ton document. Tu peux alors stocker toutes les données dans des ArrayList et des HashMap pour faire correspondre un noeud avec son contenu

    Voilà, j'espère t'avoir aidé :-)

  15. #15
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Sinon, tu pourrais peut-être trouver des éléments de réponse ici ;-)

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

Discussions similaires

  1. bouton parcourir fichier xml
    Par princessse dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 17/04/2012, 01h58
  2. Parcourir fichier XML en Javascript
    Par evil05 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 12/12/2011, 15h49
  3. Problème de parcourir fichier XML avec DOM
    Par KnowPart dans le forum Langage
    Réponses: 2
    Dernier message: 04/01/2011, 16h28
  4. [SimpleXML] probleme parcourir fichier xml
    Par brudao dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 03/12/2008, 17h48
  5. [JDOM] XML et JDOM lire fichier XML
    Par Invité(e) dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 12/11/2007, 09h21

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