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 :

Supprimer des données dans un xml


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    si le modification et la suppression de canaris de marche pas à cause de la HashMap, essaie de la supprimer et de mettre dans la classe Annee

    deux méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       public Canari getCanari(String nomCanari) { 
       		for(Iterator ite = listeCanaris.iterator();ite.hasNext();){
       			Canari unCanari = (Canari) ite.next();
       			if(nomCanari.equals(unCanari.getNom())){
       				return unCanari; // canari trouvé on le renvoie
       			}
       		}
       		// si on trouve pas ???
       		System.out.println("Pas de canari du nom de "+nomCanari+" trouvé pour l'année "+annee+ "!!!");
       		return null;
       }
    et la suppression devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	public void removeCanari(String nomCanari){
    		Canari canariASupprimer = getCanari(nomCanari);
    		if(canariASupprimer!=null) listeCanaris.remove(canariASupprimer);
    	}
    pour l'utilisation c'est comme à la fin de mon message précédent

  2. #2
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    Excuse moi mais je suis un peu noyé dans tes explications

    Je dois faire quoi

    Sinon avant de passé au HashMap, j'aivais fais ce petit bout de code :



    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
     
    public class ModifierBaseAnnee { 
     
           void editBaseAnnee() { 
     
       	   //lecture l'une année
           Annee lecture = Annee.lire(); 
           for(
        		Iterator ite=lecture.getAnnee().iterator();
        		ite.hasNext();
        	){ 
             canari unCanari = (canari) ite.next();
             if ("titi".equals(unCanari.getNom()))// recherche s'il y a un Canari qui s'appelle "titi"
             unCanari.setNom("GrosMinet"); //changement du nom
             lecture.ecrire();// enregistrement de la modification dans le fichier xml
             }
        }
    }

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Par défaut
    Fnobb, ok pour la simplicité de compréhension et d'utilisation. Par contre je suis pô d'accord pour supprimer la dico, dans la mesure où ça posait pas problème avant. Pinguoui, est-ce que tu peux poster le code où tu appelles la modification et la suppresion des enregistrements (en gros ta classe de test) stp ??

  4. #4
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    @Le prophete:
    Mon code pour modifier un enregistrement qui ne fonctionne plus
    ModifierBaseAnnee.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
     
    public class ModifierBaseAnnee { 
           void editBaseAnnee() { 
     
              Annee lecture = Annee.lire(2005);
              //Methode pour récupérer un canari par son nom 
              // Initialisation du dico 
              HashMap dico = lecture.getDico(); 
              Canari unCanari = (Canari)dico.remove("titi"); 
              System.out.println(unCanari); 
     
     
            //Au cas où j'aurais pas de canari prénommé Titi. 
            if(unCanari!=null) {  
                 unCanari.setNom("grosMinet"); // changement du nom
                 dico.put(unCanari.getNom(),unCanari); 
                 lecture.ecrire();// enregistrement de la modification 
             } 
            else { System.out.println("pas de canari");} 
        }    
    }
    Anne.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
     
    public class Annee { 
         private List listeCanaris = new ArrayList();  
         private Donnees donnees = new Donnees(); 
         private int annee = 0; 
     
          public Annee() { 
             super(); 
          } 
     
          public Annee(int annee) { 
             this(); 
             this.annee=annee; 
          }  
     
          public void remove(Canari unCanari){ 
             listeCanaris.remove(unCanari); 
          } 
     
          public void addCanari(Canari unCanari) { 
             listeCanaris.add(unCanari); 
           donnees.addCanari(unCanari); 
           System.out.println(unCanari.getNom()); 
          } 
     
          public List getAnnee() { 
             return listeCanaris; 
          }  
     
          public void setAnnee(List listeCanaris) { 
             this.listeCanaris = listeCanaris; 
          } 
     
          //Methode pour obtenir le dico 
          public HashMap getDico() { 
           return donnees.getDico(); 
        } 
    [...]

    Et Donnees.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
     
     
     
       public class Donnees { 
          private HashMap dico; 
     
          public Donnees() { 
             dico = new HashMap(); 
          } 
     
          public HashMap getDico() { 
           return dico; 
        } 
     
          public void addCanari(Canari unCanari) { 
             dico.put(unCanari.getNom(), unCanari); 
          } 
     
       }
    Voilà


    @fnobb:

    J'ai fais le modification et sa marche
    Dans la foulée, j'ai réussit à créer la méthode setCanari
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public void setCanari(String nomCanari, String nouveauNom){
           	  Canari canariAModifier = getCanari(nomCanari);
           	  if(canariAModifier!=null) canariAModifier.setNom(nouveauNom);
           }
    Pour pouvoir l'appeller comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lecture.setCanari("titi","Grosminet");

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Par défaut
    Ok, est-ce que tu peux aussi poster la classe où tu appelles editBaseAnnee() et deleteCanari() stp ?? Je vais tester tout ça et je te tiens au courant.

    Le prophète (un peu borné et qui supporte pas de pas comprendre pourquoi ça marche pas )

  6. #6
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    il n'y pas de class editBaseAnnee() et deleteCanari() ....

    Ce sont les méthode de ModifierBaseAnnee et DeleteBaseAnnee
    Je les appelles pour modifier ou supprimer un info en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ModifierBaseAnnee modifYear = new ModifierBaseAnnee();
    modifYear.editBaseAnnee(); //Action a effectuer
    ps: étant donnée que le problème est le même pour les deux class, il vaut mieux s'attarder sur un seul class ModifierBaseAnnee

    Merci

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Par défaut
    Bon, ben écoute j'ai testé chez moi et ça marche niquel. Bon, voilà le code :

    La classe Annee :
    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
     
    public class Annee {
     
    	private List listeCanaris = new ArrayList();  
    	private Donnees donnees = new Donnees(); 
    	private int annee = 0; 
     
    	 public Annee() { 
    		super(); 
    	 } 
     
    	 public Annee(int annee) { 
    		this(); 
    		this.annee=annee; 
    	 }  
     
    	 public void remove(Canari unCanari){ 
    		listeCanaris.remove(unCanari); 
    	 } 
     
    	 public void addCanari(Canari unCanari) { 
    		listeCanaris.add(unCanari); 
    	    donnees.addCanari(unCanari); 
    	    System.out.println("Ajout du canari "+unCanari.getNom()); 
    	 } 
     
    	 public List getAnnee() { 
    		return listeCanaris; 
    	 }  
     
    	 public void setAnnee(List listeCanaris) { 
    		this.listeCanaris = listeCanaris; 
    	 } 
     
    	 //Methode pour obtenir le dico 
    	 public HashMap getDico() { 
    	 	return donnees.getDico(); 
    	 }
    }
    La classe Donnees :
    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
     
    public class Donnees {
     
    	private HashMap dico; 
     
    	public Donnees() { 
    		dico = new HashMap(); 
    	} 
     
    	public HashMap getDico() { 
    		return dico; 
    	} 
     
    	public void addCanari(Canari unCanari) { 
    		dico.put(unCanari.getNom(), unCanari); 
    	} 
     
    }
    La classe ModifierBaseAnnee :
    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
     
    public class ModifierBaseAnnee { 
     
    	   public void editBaseAnnee(Annee lecture) { 
     
    		  //Methode pour récupérer un canari par son nom 
    		  // Initialisation du dico 
    		  HashMap dico = lecture.getDico();
     
    		  System.out.println("");
    		  System.out.println("Avant modif, le dico contient les canaris suivants :");
    		  afficherDico(dico);
    		  Canari unCanari = (Canari)dico.remove("titi"); 
    		  System.out.println(unCanari); 
     
     
    		//Au cas où j'aurais pas de canari prénommé Titi. 
    		if(unCanari!=null) {  
    			 unCanari.setNom("grosMinet"); // changement du nom 
    			 dico.put(unCanari.getNom(),unCanari);
    			 System.out.println("");
    			 System.out.println("Après modif, le dico contient les canaris suivants :");
    			 afficherDico(dico);
    			 System.out.println("");
    			 System.out.println("Et la liste contient les canaris suivants :"); 
    			 afficherListe(lecture.getAnnee());	 
    		} 
    		else { System.out.println("pas de canari");} 
    	}
     
    	private void afficherDico(HashMap dico) {
    		Set set = dico.keySet();
    		Iterator iterator = set.iterator();
    		while(iterator.hasNext()) {
    		  System.out.println(iterator.next());
    		}    
    	}
     
    	private void afficherListe(List list) {
    		Iterator iterator = list.iterator();
    		while(iterator.hasNext()) {
    			System.out.println(((Canari)iterator.next()).getNom());
    		}
    	}
    }
    et ma classe de test :
    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
     
    public class Test {
     
    	public static void main(String args[]) {
    		Annee lecture = new Annee();
    		Canari canari = new Canari();
    		canari.setNom("titi");
    		lecture.addCanari(canari);
    		canari = new Canari();
    		canari.setNom("poteatiti");
    		lecture.addCanari(canari);
     
    		ModifierBaseAnnee mba= new ModifierBaseAnnee();
    		mba.editBaseAnnee(lecture);
    	}
    }
    Bon, les méthodes afficheDico et afficheListe sont des méthode de test, simplement pour voir ce qu'on a dans les objets. Comme j'ai pô tes fichiers de mapping, j'ai pas utilisé les méthodes lire et écrire de la classe Annee, j'ai rempli moi-même les listes (et j'ai dû modifier légèrement la méthode editBaseAnnee). Quand j'exécute ce code, ça marche niquel chez moi. J'ai fait de même pour la suppression, et ça marche aussi. Donc l'erreur vient pas de la HashMap. Essaye d'exécuter ce code en tant que nouveau projet (recopie pas ça dans tes classes) et si ça marche, c'est que le problème dans ton appli vient d'ailleurs.

    Voilà, quand je te demandais de poster ta classe de test, je voulais parler de celle où tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ModifierBaseAnnee modifYear = new ModifierBaseAnnee(); 
    modifYear.editBaseAnnee(); //Action a effectuer
    Voilà, tiens moi au courant.

  8. #8
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    J'obtiens :
    Avant modif, le dico contient les canaris suivants :
    null
    pas de canari
    Mais la modification se fais qaund même

    D'où venais l'erreur

    Par contre, j'aimerai quand même savor quelle méthode utiliser... la tienne ou celle de fnobb et surtout Pourquoi ?

    Je souhaite un code simple, propre et rapide

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Par défaut
    Bon, en ce qui concerne l'erreur, si t'as utilisé mes classes et que t'as testé le tout indépendamment de ton appli, je t'avoue que j'y comprends plus rien, surtout que ça marchais chez toi au début. A tout hasard (mais j'y crois pas trop), regarde si le nom de tes classes est exactement le même que celui des fichiers dans lesquels elles sont enregistrées (j'ai eu une c***lle comme ça sous JBuilder, sait-on jamais...) où s'il reste pas un Donnees chafouin à le place d'un donnees dans le code.

    En ce qui concerne le choix des méthodes (indépendamment de l'utilisation de la HashMap, après c'est à toi d'adapter les méthodes d'obtention des canaris et de suppression), la méthode de fnobb est mieux, d'abord parce qu'elle est plus simple d'un point de vue utilisation, ensuite parce qu'elle correspond plus à l'approche objet : la liste de canaris (et éventuellement le dico si tu le conserves) sont des attributs de la classe Annee, donc à moins de pas pouvoir faire autrement, il vaut mieux les modifier via la classe Annee, autrement dit en appelant des méthodes de celle-ci. En ce qui concerne la rapidité, le choix d'une méthode ou d'une autre ne change rien.

    Par contre, il est clair que l'emploi d'un dico accélère le procesus, maintenant si ça marche sans et que tu galères vraiment pour le faire marcher (et comme je te disais je cale pas pourquoi ça marche chez moi et pas chez toi ) garde la méthode que tu avais faite au début.

    Voilà, après si tu as vraiment envie de faire marcher la méthode avec le dico, mets des System.out.println un peu partout avec des messages assez explicites (pour savoir dans quelle méthode tu te trouves au moment de l'affichage) et affiche tous les paramètres que tu peux pour voir où ça bogue. Dans le cas présent, tu peux déjà en mettre dans les méthodes addCanari des classes Annee et Dico pour voir si l'ajout se fait bien partout.

    Voilà, j'espère que ça t'aideras, hésite pas si t'as d'autres questions.

  10. #10
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    Lorsque j'ai tester ta méthode, je l'ai tester directement dans mon prog en l'adaptant....

    Merci beaucoup pour tes explications....
    Si l'utilsation de la class Donnees et le HashMap n'est pas utile, je préfère l'enlever... ça me fera des class en moins pour la maintenance du prog

    Ces différenetes méthode m'ont permis de voir deux choses différentes.... Rien de tel pour mon apprentissage

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Inserer des données dans fichier Xml
    Par Logarythme dans le forum InfoPath
    Réponses: 3
    Dernier message: 28/02/2008, 08h35
  2. supprimer des données dans plusieurs tables
    Par mnssylvain dans le forum Access
    Réponses: 4
    Dernier message: 28/01/2007, 19h06
  3. Récupérer des données dans un .XML
    Par Lootro dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/08/2006, 22h38
  4. Remplacer / Supprimer des données dans un fichier txt
    Par PedroBD dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2006, 13h33
  5. [MySQL] supprimer des données dans la base
    Par Commodore dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/02/2006, 02h43

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