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

Android Discussion :

Remonter un arbre XML


Sujet :

Android

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut Remonter un arbre XML
    Bonjour,
    J'ai une classe RechercheXML

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
     
    import java.io.File;
    import java.util.ArrayList;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
     
     
    public class RechercheXML {
     
    	private String fichier = "incidents.xml";
     
     
    	public RechercheXML(){
     
    	}
     
    	public String RechercheImage(int commande){
     
    		int ValeurAchercher = commande;
    		String ContenuDeLattributImage = null;
     
    		 try {
     
    			  File file = new File(fichier);
    			  DocumentBuilderFactory dbf = 
    			    DocumentBuilderFactory.newInstance();
    			  DocumentBuilder db = dbf.newDocumentBuilder();
    			  Document document = db.parse(file);
    			  document.getDocumentElement().normalize();
     
    			  NodeList node = document.getElementsByTagName("incidents");
     
     
    			  for (int i = 0; i < node.getLength(); i++) {
    				  Node firstNode = node.item(i);
     
     
    			  if (firstNode.getNodeType() == Node.ELEMENT_NODE) {
     
     
     
    			  Element element = (Element) firstNode;
     
     
     
    			  NodeList NombreDeMenus =  element.getElementsByTagName("menu");
     
     
    			  			for (int j = 0 ; j < NombreDeMenus.getLength();j++){
     
    			  			Node PremierElementSousMenu = NombreDeMenus.item(j);
     
     
     
    			  			Element ElementDuMenu = (Element) PremierElementSousMenu;
     
     
     
     
    			  					NodeList liste = ElementDuMenu.getElementsByTagName("item");
     
     
    								for(int k=0;k<liste.getLength();k++){
     
    								Node e = liste.item(k);
     
    								NamedNodeMap nnm = e.getAttributes();
     
    								Node valeur = nnm.getNamedItem("valeur");
     
    								String ContenuDeLattributValeurTexte = valeur.getTextContent();
    								int ContenuDeLattributValeur = Integer.valueOf(ContenuDeLattributValeurTexte);
     
    								if (ContenuDeLattributValeur == ValeurAchercher){
     
     
     
     
    								Node image = nnm.getNamedItem("image");
    								ContenuDeLattributImage =  image.getTextContent();
     
     
     
     
     
    								}
     
     
     
    			  				}
     
     
     
    			  }
     
     
    			  }
    			  }
    			  } catch (Exception e) {
    			    e.printStackTrace();
    			  }
     
     
    		return ContenuDeLattributImage;
     
    	}
    }
    Une classe main :

    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
     
     
    import java.util.ArrayList;
     
     
    public class TestIncidents {
     
     
     
     public static void main(String argv[]) {
     
     
    	 RechercheXML rech = new RechercheXML();
     
    	 String image = rech.RechercheImage(91);
     
    	 System.out.println(image);
    }
    }
    et un fichier incidents.xml

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
     
     
    <?xml version="1.0" encoding="utf-8" ?>
    <incidents>
    	<menu nom="Sinistre" image="collectearretee.png">
    		<item nom="Véhicule" image="vehicule.png" valeur="1" />
    		<item nom="Bâtiment" image="maison.png" valeur="2" />
    		<item nom="Voirie" image="circulation.png" valeur="3" />
    		<item nom="Blessé" image="sinistre_blesse.png" valeur="4" />
    	</menu>
    	<menu nom="Accessibilité" image="circulation.png">
    		<item nom="Élagage" image="elagage.png" valeur="5" />
    		<item nom="Route barrée" image="routebarree.png" valeur="6" />
    		<item nom="Stationnement gênant" image="stationnement.png" valeur="7" />
    		<item nom="Ligne électrique" image="electricite.jpg" valeur="64" />
    	</menu>
    	<!--<menu nom="BAC" image="bac.png">
    		<menu nom="Couvercle" image="couverclecasse.png">
    			<menu nom="340L" image="340l.png">
    				<item nom="OM" valeur="8" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="9" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    			<menu nom="360L" image="360l.png">
    				<item nom="OM" valeur="10" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="11" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    			<menu nom="660L" image="660l.png">
    				<item nom="OM" valeur="12" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="13" image="bacdel.png" saisie="numAdr"/>
    			</menu>  
    		</menu>
    		<menu nom="A remplacer" image="bacaremplacer.png">
    			<menu nom="340L" image="340l.png">
    				<item nom="OM" valeur="14" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="15" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    			<menu nom="360L" image="360l.png">
    				<item nom="OM" valeur="16" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="17" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    			<menu nom="660L" image="660l.png">
    				<item nom="OM" valeur="18" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="19" image="bacdel.png" saisie="numAdr"/>
    			</menu> 
    		</menu>
    		<menu nom="Roue" image="rouecassee.jpg">
    			<menu nom="340L" image="340l.png">
    				<item nom="OM" valeur="20" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="21" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    			<menu nom="360L" image="360l.png">
    				<item nom="OM" valeur="22" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="23" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    			<menu nom="660L" image="660l.png">
    				<item nom="OM" valeur="24" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="25" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    		</menu>
    		<menu nom="Absent" image="conteneurrmanquant.jpg">
    			<menu nom="340L" image="340l.png">
    				<item nom="OM" valeur="26" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="27" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    			<menu nom="360L" image="360l.png">
    				<item nom="OM" valeur="28" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="29" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    			<menu nom="660L" image="660l.png">
    				<item nom="OM" valeur="30" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="31" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    		</menu>
    		<menu nom="Avalé" image="bac_avale.png">
    			<menu nom="340L" image="340l.png">
    				<item nom="OM" valeur="32" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="33" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    			<menu nom="360L" image="360l.png">
    				<item nom="OM" valeur="34" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="35" image="bacdel.png" saisie="numAdr"/>
    			</menu>
    			<menu nom="660L" image="660l.png">
    				<item nom="OM" valeur="36" image="bacom.png" saisie="numAdr"/>
    				<item nom="DEL" valeur="37" image="bacdel.png" saisie="numAdr"/>
    			</menu>    
    		</menu>
    		<menu nom="Refus de tri" image="nonconforme.png">
    			<item nom="Déchet vert" image="dechetvert.png" valeur="38" saisie="numAdr"/>
    			<item nom="Verre" image="verre.png" valeur="39" saisie="numAdr"/>
    			<item nom="Mauvais jour" valeur="40" image="mauvaisjour.png" saisie="numAdr"/>
    			<item nom="Plastique" image="PLASTIQUE.jpg" valeur="95" saisie="numAdr"/>
    			<item nom="Autre" valeur="41" saisie="numAdr"/>
    		</menu>
    		<menu nom="Déborde" image="conteneurdeborde.png">
    			<item nom="OM" valeur="42" image="bacom.png" saisie="numAdr"/>
    			<item nom="DEL" valeur="43" image="bacdel.png" saisie="numAdr"/>
    		</menu>
    	</menu>
    -->
      <menu nom="PAV" image="pav.png">
    		<item nom="Encombrants" image="encombrants.png" valeur="44" />
    		<item nom="Sale" image="colonnetaguee.png" valeur="45" />
    		<item nom="À réparer" image="colonneareparer.png" valeur="46" />
    		<item nom="À remplacer" valeur="47" image="pavachanger.png" />
    		<menu nom="Taux" image="remplissageTaux.png">
    		  <menu nom="Verre" image="verre.png">
    		  <item nom="0%" image="remplissage0.png" valeur="66" />
    			<item nom="25%" image="remplissage25.png" valeur="67" />
    			<item nom="50%" image="remplissage50.png" valeur="68" />
    			<item nom="75%" image="remplissage75.png" valeur="69" />
    			<item nom="100%" image="remplissage100.png" valeur="70" />
    			<item nom="Déborde" image="remplissageSup100.png" valeur="71" />
    		  </menu>
    		  <menu nom="JRM" image="jrm.png">
    		  <item nom="0%" image="remplissage0.png" valeur="72" />
    			<item nom="25%" image="remplissage25.png" valeur="73" />
    			<item nom="50%" image="remplissage50.png" valeur="74" />
    			<item nom="75%" image="remplissage75.png" valeur="75" />
    			<item nom="100%" image="remplissage100.png" valeur="76" />
    			<item nom="Déborde" image="remplissageSup100.png" valeur="77" />
    		  </menu>
    		  <menu nom="OM" image="OM.png">
    		  <item nom="0%" image="remplissage0.png" valeur="78" />
    			<item nom="25%" image="remplissage25.png" valeur="79" />
    			<item nom="50%" image="remplissage50.png" valeur="80" />
    			<item nom="75%" image="remplissage75.png" valeur="81" />
    			<item nom="100%" image="remplissage100.png" valeur="82" />
    			<item nom="Déborde" image="remplissageSup100.png" valeur="83" />
    		  </menu>
    		  <menu nom="DEL" image="emballage.png">
    		  <item nom="0%" image="remplissage0.png" valeur="84" />
    			<item nom="25%" image="remplissage25.png" valeur="85" />
    			<item nom="50%" image="remplissage50.png" valeur="86" />
    			<item nom="75%" image="remplissage75.png" valeur="87" />
    			<item nom="100%" image="remplissage100.png" valeur="88" />
    			<item nom="Déborde" image="remplissageSup100.png" valeur="89" />
    		  </menu>
    		</menu>
    	</menu>
    	<menu nom="Decheterie" image="transport.png">
    		<item nom="A remplacer" valeur="54" image="transportaremplacer.png"/>
    		<item nom="A réparer" valeur="55" image="transportareparer.png"/>
    		<menu nom="Poids" image="pontbascule.png">
    			<item nom="Gravats" image="gravats.png" valeur="56" saisie="poidsDyn numAdr"/>
    			<item nom="Bois" image="bois.png" valeur="57" saisie="poidsDyn numAdr"/>
    			<item nom="Déchet vert" image="dechetvert.png" valeur="58" saisie="poidsDyn numAdr"/>
    			<item nom="Carton" image="carton.png" valeur="59" saisie="poidsDyn numAdr"/>
    			<item nom="DEL" image="emballage.png" valeur="60" saisie="poidsDyn numAdr"/>
    			<item nom="Feraille" image="ferraille.png" valeur="61" saisie="poidsDyn numAdr"/>
    			<item nom="Non recyclable" image="nonrecyclable.png" valeur="65" saisie="poidsDyn numAdr"/>
    			<menu nom="Plastique" image="PLASTIQUE.jpg">
    			   <item nom="CD/DVD" image="CD.jpg" valeur="92" saisie="poidsDyn numAdr"/>
    			   <item nom="Film" image="POCHEP.jpg" valeur="93" saisie="poidsDyn numAdr"/>
    			   <item nom="Polystirène" image="POLY.jpg" valeur="96" saisie="poidsDyn numAdr"/>
    			   <item nom="Mélange" image="PLASTIQUE.jpg" valeur="94" saisie="poidsDyn numAdr"/>
    			</menu>
    		</menu>
    	</menu>
    	<menu nom="Vidage" image="vidage.png">
    		<item nom="OM" valeur="62" image="bacom.png" saisie="poidsDyn"/>
    		<item nom="DEL" valeur="63" image="bacdel.png" saisie="poidsDyn"/>
    		<item nom="JRM" valeur="90" image="jrm.png" saisie="poidsDyn"/>
    		<item nom="Verre" valeur="91" image="VERRE.png" saisie="poidsDyn"/>
    	</menu>
    </incidents>
    Grâce à ma méthode RechercheImage, j'arrive à obtenir l'image de la "valeur" saisie (exemple : 91), moi ce que je voudrais c'est Remonter tout l'arbre pour obtenir un chemin.
    exemple : Incidents/Sinistre/Blessé/image.png

    Alors j'ai essayé quelques trucs mais en vain. Des idées ?

    Je vous remercie.

  2. #2
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 139
    Par défaut
    Bonjour,
    Alors si j'ai bien compris t'es dans Incidents, et ya 3 boucles for, t’arrive à trouver 91 mais tu voudrais :
    Incidents/Sinistre/Blessé/image.png

    Je pense que quand t'entre dans une boucle tu peux récupérer le nom du nœud, par exemple Sinistre et le stocker dans un String.

    Donc t'as déjà le Incidents/ après si dans chaque boucle t’arrive à récupérer Sinistre, Blessé et image.png, tu peux tout assemblé.

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Ouais, mais en fait, le document peut changer a tout moment, il est variable. Donc il faut que j'arrive à faire une méthode générique, qui remonte l'arbre, tous ses sous-menu (admettons qu'on en rajoute entre temps) et afficher le chemin complet.

  4. #4
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Salut,
    Ta recherche, tu la feras que une fois ou ça peut t'arriver souvent ? Car là tel que c'est fait, ça te reparsera le fichier à chaque fois.
    Idéalement il faudrait que tu arrives à te faire une représentation et mémoire de ton fichier XML.

    1 objet Incident qui contient une liste d'objets "Menu";
    1 objet Menu contient un nom, un chemin vers une image et une liste d'objets "Item";
    1 objet Item contient un nom, une image,une valeur et un type de saisie (?)

    Du coup, tu parses tranquillement ton fichier XML, tu stockes tout en mémoire. Et ensuite, lorsque tu as besoin de faire une recherche, tu parcours tes collections d'objets, et tu retrouveras plus facilement et rapidement ce dont tu as besoin.

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Ca me parait être la meilleure solution. Je vais tenter de faire comme ça.

    En ce qui concerne le chemin, l'idéal serait de le créer en " remontant " l'arbre, car tant que mon prog recherche la valeur saisie ... Il ne saura pas mettre dans le String pour créer le chemin. Je viens de voir ça à l'instant.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Déjà les mecs je vous remercie de vous pencher à mon problème. C'est très aimable à vous, et je m'excuse pour les posts précédents.

    Thierry voilà c'est bien ça, il n'y a pas de régularité, tu peux avoir plus de 3 menus imbriqués, en fait, ça peut aller jusqu'à l'infini en théorie. Donc ouais j'arrive à récupérer VERRE.PNG quand je saisie 91. Comme ça j'associe une image à l'anomalie saisie.

    Et le chemin, en " dur " j'y arrive à le construire, mais dans les boucles jmy perds complet ^^

    J'ai pas compris pour le " return ", tu peux expliciter je te prie ?

    Merci les gars !

  7. #7
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 139
    Par défaut
    Il faut faire comme le dit MrDuChnok.

    Il faut avoir une collection de tout les items.
    Je peux pas te faire l'algorithme.
    Mais je pense que tu peux déjà récupérer tout les items dans les menu de 1er niveau.
    Ça te permettrait d'avoir des trucs comme ça :
    Incident/Sinistre/vehicule.png
    Incident/Sinistre/maison.png

    Ensuite, il faudra regarder les nœuds menu dans les nœuds menu, t'aurais :
    Incident/Dechet/Poids/gravats.png

    En fait avec des boucles tu peux à chaque fois que t'ouvre un nœud menu, regarder si à l'intérieur il y a un nœud menu et regarder si dedans il y a un nœud menu.
    C'est marrant dit comme ça, ça sonne récursif.

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Merci !!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2005, 11h00
  2. [XSLT] Arbre XML -> Arbre HTML
    Par FT dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 29/09/2004, 09h49
  3. [XML] comment récupérer un arbre xml posté par http ?
    Par tomperso dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 02/07/2004, 10h29
  4. Arbre XML
    Par Neuromancien2 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 13/02/2004, 15h41
  5. XSL pour visualiser arbre XML sous forme de tableau en HTML
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 28/03/2003, 10h55

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