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

Collection et Stream Java Discussion :

Treemap sur arbre Jdom


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de copin
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 231
    Par défaut Treemap sur arbre Jdom
    Bonjour à tous!

    J'aurai une petite question concernant l'utilisation de Treemap sur un arbre JDOM! Ya une partie XML dans ma question mais comma ca porte sur Treemap je poste ici!

    Voila je dois manipuler un arbre JDOM que je viens de modifier en ajoutant des éléments... Ce que je voudrais c'est trier cet arbre de manière alphabétique.

    J'ai donc le fichier suivant.
    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
    < ?xml version="1.0" encoding="ISO-8859-1" ?>
    		<index>
    			<terme>
    				<chaine> Dupond </chaine>
    				<occurrence>
    				<fichier> text1.xml </fichier>
    				<arboresence> carnet/entree/nom </arboresence>
    				</occurrence>
    			</terme>
    			<terme>
    				<chaine> tintin </chaine>
    				<occurrence>
    				<fichier> text1.xml </fichier>
    				<arboresence> carnet/entree/nom </arboresence>
    				</occurrence>
    			</terme>
    		</index>
    Donc ce que je souhaite c'est trier les structures <terme> de l'arbre créer à partir de ce document en fonction du contenu des noeuds <chaine>.

    Donc comment je peux utiliser Treemap dans ce cas?

    D'avance merci

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    cette question m'interesse fortement aussi !

  3. #3
    Membre éclairé Avatar de copin
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 231
    Par défaut
    Bon j'ai un peu avancer mais me reste un problème pour regénérer mon Jdom

    J'ai fais les opérations suivantes.
    -J'ai mis mon arbre dans un treemap
    -Trié le treemap
    -Mis le contenu du Treemap dans un Iterator

    Le problème c'est que j'arrive pas à reconstruire un arbre JDom en parcourant mon iterator
    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
      TreeMap tri = new TreeMap();
                //Pour chaque element fils du document root ici <index>
                String valeur = null;
                while(i.hasNext()){
                    courant = (Element) i.next();
                    //Chaque <terme>
                    //On récupere la valeur de la balise <chaine>
                    valeur = getValueOf("chaine", courant);
                    System.out.println(valeur);
                    tri.put(valeur, courant);
                }
     
    	        System.out.println(tri);            
                //Le tri est terminé.
                //On effectue le traitement souhaité
                Iterator it = tri.keySet().iterator();    
                 org.jdom.Element racine = new Element("index");
                 test.setRootElement(racine);
                while(it.hasNext()){
                 	Element temp = (Element)tri.get(it.next());
                	racine.addContent(temp);
                }
    Si s'execute j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    java.lang.NullPointerException
    at projet.Parsing.main(Parsing.java:59)
    Exception in thread "main" java.lang.NullPointerException
    	at org.jdom.output.XMLOutputter.output(XMLOutputter.java:369)
    	at org.jdom.output.XMLOutputter.output(XMLOutputter.java:203)
    	at projet.Parsing.enregistrer(Parsing.java:137)
    	at projet.Parsing.main(Parsing.java:79)
    line 59 c ca: test.setRootElement(racine);

    D'avance merci pour votre aide.

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Un TreeMap est toujours trié. Par défaut l'ordre se fait en comparant les clés (interface Comparable).

    Ton algo a l'air juste. Pour ta NullPointerException, a priori c'est que ta variable "test" est nul . Poste le code de la classe projet.Parsing pour plus de detail
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre éclairé Avatar de copin
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 231
    Par défaut
    Voici toute ma classe parsing.java
    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
    package projet;
     
    import java.io.*;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.StringReader;
    import java.util.Iterator;
    import java.util.List;
    import java.util.TreeMap;
     
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.Format;
    import org.jdom.output.*;
    import org.jdom.output.XMLOutputter;
    import org.xml.sax.InputSource;
     
    public class Parsing {
     
    	public static void main (String args[]){
     
    		org.jdom.Document document = null;
     
    		//Racine du document
    	    org.jdom.Document test=null;
    	    //On crée une instance de SAXBuilder
    	    SAXBuilder sxb = new SAXBuilder();
    	    try{
    	        //On crée un nouveau document JDOM avec en argument le fichier XML
    	        //Le parsing est terminé ;)
    	        document = sxb.build(new InputSource (new FileReader("index.xml")));
    	        System.out.println("Document " + document);
    	        List childrens = document.getRootElement().getChildren();
                Iterator i = childrens.iterator();
                Element courant = null;
                //Ma treemap d'objet
                TreeMap tri = new TreeMap();
                //Pour chaque element fils du document root ici <index>
                String valeur = null;
                while(i.hasNext()){
                    courant = (Element) i.next();
                    //Chaque <terme>
                    //On récupere la valeur de la balise <chaine>
                    valeur = getValueOf("chaine", courant);
                    System.out.println(valeur);
                    tri.put(valeur, courant);
                }
     
    	        System.out.println(tri);            
                //Le tri est terminé.
                //On effectue le traitement souhaité
                Iterator it = tri.keySet().iterator();
     
     
                org.jdom.Element racine = new Element("index");
     
                test.setRootElement(racine);
     
                while(it.hasNext()){
     
                	Element temp = (Element)tri.get(it.next());
                	racine.addContent(temp);
     
                }
     
    	    }catch(Exception e){
    	        e.printStackTrace();
    	    }
    	    enregistrer(test, "indextrie.xml");
    	}
     
     
    	public static String getValueOf(String balise, Element root){
    		String retour = "";
     
    		Element elt = goToElement(root, balise);
     
    		retour = getContenu(elt);
     
    		return retour;
     
    	}
     
     
    	public static Element goToElement(Element root, String child){
            Element retour = null;
     
            if(getNom(root).equals(child)){
                retour = root;
            }else{
                List childrens = root.getChildren();
                Iterator i = childrens.iterator();
                Element courant = null;
                while(i.hasNext()){
                    courant = (Element) i.next();
                    if(retour == null){
    	                if(getNom(courant).equals(child)){
    	                    retour = courant;
    	                }else{
    	                    retour = goToElement(courant, child);
    	                }
                    }
                }
            }
     
            return retour;
     
        }
     
     
    	public static String getContenu(Element e){
            return e.getText();
        }
     
        public static String getNom(Element e){
            return e.getName();
        }
     
        public static void enregistrer(Document doc, String fichier)
    	   {
    	      try
    	      {
    	         //On utilise ici un affichage classic avec getPrettyFormat()
    	         XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
    	         //Remarquez qu'il suffit simplement de créer une instance de FileOutputStream
    	         //avec en argument le nom du fichier pour effectuer la sérialisation.
    	         sortie.output(doc, new FileOutputStream(fichier));
    	      }
    	      catch (java.io.IOException e){}
    	   }
    }
    Merci de ton aide

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Heu... j'ai loupé un truc ou "test" est initialisé a null et jamais modifié ?!??
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Membre éclairé Avatar de copin
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 231
    Par défaut
    Autant pour moi, dans ma boucle while
    c'est pas racine.addcontent(temp) mais test.addcontent(temp)

    Cependant ca marche toujours pas!

    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
    package projet;
     
    import java.io.*;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.StringReader;
    import java.util.Iterator;
    import java.util.List;
    import java.util.TreeMap;
     
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.Format;
    import org.jdom.output.*;
    import org.jdom.output.XMLOutputter;
    import org.xml.sax.InputSource;
     
    public class Parsing {
     
    	public static void main (String args[]){
     
    		org.jdom.Document document = null;
     
    		//Racine du document
    	    org.jdom.Document test = null;
    	    //On crée une instance de SAXBuilder
    	    SAXBuilder sxb = new SAXBuilder();
    	    try{
    	        //On crée un nouveau document JDOM avec en argument le fichier XML
    	        //Le parsing est terminé ;)
    	        document = sxb.build(new InputSource (new FileReader("index.xml")));
    	        System.out.println("Document " + document);
    	        List childrens = document.getRootElement().getChildren();
                Iterator i = childrens.iterator();
                Element courant = null;
                //Ma treemap d'objet
                TreeMap tri = new TreeMap();
                //Pour chaque element fils du document root ici <index>
                String valeur = null;
                while(i.hasNext()){
                    courant = (Element) i.next();
                    //Chaque <terme>
                    //On récupere la valeur de la balise <chaine>
                    valeur = getValueOf("chaine", courant);
                    System.out.println(valeur);
                    tri.put(valeur, courant);
                }
     
    	        System.out.println(tri);            
                //Le tri est terminé.
                //On effectue le traitement souhaité
                Iterator it = tri.keySet().iterator();
                org.jdom.Element racine =  new Element("index");
     
     
                while(it.hasNext()){
                	Element temp = (Element)tri.get(it.next());
                	test.addContent(temp);
                 }
                test.setRootElement(racine);
    	    }catch(Exception e){
    	        e.printStackTrace();
    	    }
    	    enregistrer(test, "indextrie.xml");
    	}
     
     
    	public static String getValueOf(String balise, Element root){
    		String retour = "";
     
    		Element elt = goToElement(root, balise);
     
    		retour = getContenu(elt);
     
    		return retour;
     
    	}
     
     
    	public static Element goToElement(Element root, String child){
            Element retour = null;
     
            if(getNom(root).equals(child)){
                retour = root;
            }else{
                List childrens = root.getChildren();
                Iterator i = childrens.iterator();
                Element courant = null;
                while(i.hasNext()){
                    courant = (Element) i.next();
                    if(retour == null){
    	                if(getNom(courant).equals(child)){
    	                    retour = courant;
    	                }else{
    	                    retour = goToElement(courant, child);
    	                }
                    }
                }
            }
     
            return retour;
     
        }
     
     
    	public static String getContenu(Element e){
            return e.getText();
        }
     
        public static String getNom(Element e){
            return e.getName();
        }
     
        public static void enregistrer(Document doc, String fichier)
    	   {
    	      try
    	      {
    	         //On utilise ici un affichage classic avec getPrettyFormat()
    	         XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
    	         //Remarquez qu'il suffit simplement de créer une instance de FileOutputStream
    	         //avec en argument le nom du fichier pour effectuer la sérialisation.
    	         sortie.output(doc, new FileOutputStream(fichier));
    	      }
    	      catch (java.io.IOException e){}
    	   }
    }

Discussions similaires

  1. [2008R2] Requête CTE sur arbre avec redondance
    Par Caushug dans le forum Développement
    Réponses: 2
    Dernier message: 02/01/2014, 13h36
  2. Réponses: 1
    Dernier message: 27/03/2013, 17h33
  3. [WD16] Touche CTRL sur Arbre
    Par WDKyle dans le forum WinDev
    Réponses: 5
    Dernier message: 25/05/2012, 14h07
  4. [JDOM] Insertion d'un Noeud dans un arbre JDOM
    Par Endy dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 09/06/2006, 15h00
  5. Recherche documentation sur les arbres
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/09/2004, 01h40

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