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 :

[castor]Lire un xml


Sujet :

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

  1. #1
    Membre habitué 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 : 43
    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
    Points : 185
    Points
    185
    Par défaut [castor]Lire un xml
    Bonjour,

    Me re-Voilà pour la suite .... je pose beaucoup de question aujourd'hui car je vais bientot partir en vacance et j'aurai un pc mais pas internet


    J'ai un fichier test.xml qui est créé sous la forme:
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?> 
    <ListeFiche> 
       <fiche> 
          <nom>titi</nom> 
          <sexe>mâle</sexe> 
          <stam>5608</stam> 
          <bague>12</bague> 
          <annee>2004</annee> 
       </fiche> 
       <fiche> 
          <nom>mimie</nom> 
          <sexe>femelle</sexe> 
          <stam>5608</stam> 
          <bague>32</bague> 
          <annee>2003</annee> 
       </fiche> 
    </ListeFiche>
    J'ai un fichier mapping :
    FichierMapping.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
     
    <?xml version="1.0" ?> 
    <mapping> 
       <description></description> 
       <class name="Annee" > 
          <map-to xml="Annee"/> 
          <field name="Annee" type="canari" collection="collection"> 
             <bind-xml name="canari" /> 
          </field> 
       </class> 
     
       <class name="canari" > 
          <field name="nom" type="string" > 
             <bind-xml name="nom" /> 
          </field> 
          <field name="sexe" type="string" > 
             <bind-xml name="sexe" /> 
          </field>
          <field name="stam" type="integer" > 
             <bind-xml name="stam" /> 
          </field>
          <field name="bague" type="integer" > 
             <bind-xml name="bague" /> 
          </field> 
          <field name="year" type="integer" > 
             <bind-xml name="year" /> 
          </field> 
       </class> 
    </mapping>
    J'aimerai lire le fichier test.xml et afficher le resultat sous forme de tableau dans un JLabel (avec onglet comme dans Eclipse)

    Merci pour votre aide et vos conseils

  2. #2
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    Il me semble que tu utilise castor qui permet de reconstruire tes objets à partir du fichier XML non ? dans ce cas recré tes objet grace à Castor et au fichier XML puis crée une classe qui hérite de JTableModel et qui permet d'afficher tes objets (Canari il me semble), grace à une JTable. N'essaye surtout pas de lire les fichier XML directement car ça ne correspondrait pas à la logique de ton programme qui utilise un mapping objet/XML grace à Castor.

  3. #3
    Membre habitué 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 : 43
    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
    Points : 185
    Points
    185
    Par défaut
    Si je comprend bien, il faut utilise un unmarshaller de castor pour sortir les données?

    Je créer une class identique à celle si dessous mais avec un unmarshaller?

    CreationBaseAnnee.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
     
    mport java.io.*; 
    import org.exolab.castor.xml.*; 
    import org.exolab.castor.mapping.*;
     
     
    public class CreationBaseAnnee { 
     
           void creerBaseAnnee() { 
     
            /*Test 
            *enregistrement d'un oiseau "titi" 
            *enregistrement d'un oiseau "mimie" 
            * 
            */ 
            canari titi=new canari("titi","mâle",1212,58,2004); 
            canari mimie=new canari("mimie","femelle",5608,32,2003); 
            Annee liste= new Annee(); 
            liste.addCanari(titi); 
            liste.addCanari(mimie); 
            File file = new File("C:\\travail\\test.xml"); 
            Writer writer = null; 
            try { 
               writer = new FileWriter(file); 
               //getsion du mapping 
               Mapping mapping = new Mapping(); 
               mapping.loadMapping("C:\\travail\\fichierMapping.xml"); // c'est ton fichier de mapping 
               //gestion du marshaller 
               Marshaller marshaller = new Marshaller(writer); 
               //on affecte au marshaller le mapping 
               marshaller.setMapping(mapping); 
               marshaller.setEncoding("ISO-8859-1"); 
               marshaller.marshal(liste); 
            } catch (MarshalException me) { 
               me.printStackTrace(); 
               System.exit(0); 
            } catch (ValidationException ve) { 
               ve.printStackTrace(); 
               System.exit(0); 
            } catch (IOException ioe) { 
               ioe.printStackTrace(); 
               System.exit(0); 
            } catch (org.exolab.castor.mapping.MappingException ioe) { 
               ioe.printStackTrace(); 
              System.exit(0); 
           } 
        }  
     
    }

  4. #4
    Membre habitué 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 : 43
    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
    Points : 185
    Points
    185
    Par défaut
    C'est bon j'ai créer un unmarshaller.... par contre je ne sasi pas quoi en faire!!!!

    Je sais que c'est bizarre mais je ne comprend pas ce que le unmarshaller créer réellement...
    je suppose qu'il lit les données mais il les stocke où

    Voilà mon unmarshaller:

    LectureBaseAnnee.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
     
    import java.io.*; 
    import org.exolab.castor.xml.*; 
    import org.exolab.castor.mapping.*;
     
    public class LectureBaseAnnee {
     
        void lireBaseAnnee() { 
     
            Annee liste= new Annee();
            File file = new File("C:\\travail\\test.xml");
     
            Reader reader = null; 
            try { 
               reader = new FileReader(file); 
               //getsion du mapping 
               Mapping mapping = new Mapping(); 
               mapping.loadMapping("C:\\travail\\fichierMapping.xml"); // Fichier de mapping 
               //gestion du unmarshaller 
               Unmarshaller unmarshaller = new Unmarshaller(reader); 
               //on affecte au marshaller le mapping 
               unmarshaller.setMapping(mapping);  
               canari canari = (canari)unmarshaller.unmarshal(reader);
     
            } catch (MarshalException me) { 
               me.printStackTrace(); 
               System.exit(0); 
            } catch (ValidationException ve) { 
               ve.printStackTrace(); 
               System.exit(0); 
            } catch (IOException ioe) { 
               ioe.printStackTrace(); 
               System.exit(0); 
            } catch (org.exolab.castor.mapping.MappingException ioe) { 
               ioe.printStackTrace(); 
              System.exit(0); 
           } 
        }  
    }
    help me please.... je suis un peu paumé

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bon je te previens je connais pas castor alors je risque de faire le boulet.
    tu peux pas sauvegarder ton objet canari dans ta classe et le rendre accessible ? genre :
    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
    public class LectureBaseAnnee {
        canari monCanari;
        void lireBaseAnnee() {
            //ton code
            monCanari = (canari)unmarshaller.unmarshal(reader);
            //ton code
        }
        public canari getLastRead() {
             return monCanari;
        }
        public canari readCanari() {
             lireBaseAnnee();
             return getLastRead();
        }
    }
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre habitué 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 : 43
    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
    Points : 185
    Points
    185
    Par défaut
    Je ne sais pas.... j'aurai du mal à te dire si le code que tu viens de me donner est faux ou s'il ne correspond pas à mes besoins

    Ce que je peux dire, c'est:

    j'ai cà:

    LectureBaseAnnee.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
     
    import java.io.*; 
    import org.exolab.castor.xml.*; 
    import org.exolab.castor.mapping.*;
     
    public class LectureBaseAnnee {
     
        void lireBaseAnnee() { 
     
     
            File file = new File("C:\\travail\\test.xml");
     
            Reader reader = null; 
            try { 
               reader = new FileReader(file); 
               //getsion du mapping 
               Mapping mapping = new Mapping(); 
               mapping.loadMapping("C:\\travail\\fichierMapping.xml"); // Fichier de mapping 
               //gestion du unmarshaller 
               Unmarshaller unmarshaller = new Unmarshaller(reader); 
               //on affecte au marshaller le mapping 
               unmarshaller.setMapping(mapping);  
               canari canari = (canari)unmarshaller.unmarshal(reader);
     
               canari.affiche();
     
            } catch (MarshalException me) { 
               me.printStackTrace(); 
               System.exit(0); 
            } catch (ValidationException ve) { 
               ve.printStackTrace(); 
               System.exit(0); 
            } catch (IOException ioe) { 
               ioe.printStackTrace(); 
               System.exit(0); 
            } catch (org.exolab.castor.mapping.MappingException ioe) { 
               ioe.printStackTrace(); 
              System.exit(0); 
           } 
        }  
    }
    et la class canari

    canari.class
    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
     
    public class canari { 
     
       private String nom; 
        private String sexe; 
        private int stam; 
        private int bague; 
        private int year; 
     
       public canari() {} 
     
       public canari(String nom,String sexe,int stam,int bague, int year) { 
          setNom(nom);
          setSexe(sexe);
          setStam(stam);
          setBague(bague);
          setYear(year);
     
       } 
     
        //méthode d'écriture 
       public void setNom(String nom) { 
          this.nom=nom; 
       } 
     
       //méthode de lecture 
       public String getNom() { 
          return nom; 
       } 
     
       //méthode d'écriture 
       public void setSexe(String sexe) { 
          this.sexe=sexe; 
       } 
     
       //méthode de lecture 
       public String getSexe() { 
          return sexe; 
       } 
     
       //méthode d'écriture 
       public void setStam(int stam) { 
          this.stam=stam; 
       } 
            //méthode de lecture 
       public int getStam() { 
          return stam; 
       } 
     
       //méthode d'écriture 
       public void setBague(int bague) { 
          if (bague<=0) { 
             System.err.println("Erreur : Bague négative  !"); 
                System.exit(0); 
            } 
           else { 
              this.bague=bague; 
           } 
          }  
     
       //méthode de lecture 
       public int getBague() { 
          return bague; 
       } 
     
       //méthode d'écriture 
       public void setYear(int year) { 
          this.year=year; 
       } 
     
       //méthode de lecture 
       public int getYear() { 
          return year; 
       } 
     
     
       void affiche() { 
             System.out.println("Nom: "+nom+" - Sexe:"+sexe+" - Stam:"+stam+" - Numéro de bague :"+bague+" - Année :"+year); 
          } 
     
    }
    Cette class est déjà utilisé pour créer un fichier xml avec CreationBaseAnne.java et Annee.java

    Le but est d'afficher le contenu du XML créé dans un JTable

    Je suis un peu perdu là

  7. #7
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Hypothese : canari.affiche() affiche correctement un fichier correctement ecrit.
    Alors : t'as fini !
    Essaie de faire les modifs que je t'ai dit dans ta classe LectureBaseAnnee et tente un main() du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new LectureBaseAnnee().readCanari().affiche()
    et ca doit t'afficher la meme chose que ce que t'as envoye.

    Pour le JTable, t'as plus que le TableModel et c bon !!
    P.S : peace and love
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  8. #8
    Membre habitué 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 : 43
    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
    Points : 185
    Points
    185
    Par défaut
    Hello xavlours,

    canari.affiche() affiche corectement les données dans la console...
    je ne sais pas si je peux l'utiliser pour LectureBaseAnne.java

    Pour le moment avec LectureBaseAnne.java, j'ai cette erreur :

    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
     
    java.lang.NullPointerException
    	at org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:1635)
    	at org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:1292)
    	at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    	at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:605)
    	at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:513)
    	at LectureBaseAnnee.lireBaseAnnee(LectureBaseAnnee.java:22)
    	at Action.actionPerformed(Action.java:32)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
    	at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
    	at javax.swing.AbstractButton.doClick(AbstractButton.java:289)
    	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1113)
    	at javax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseReleased(BasicMenuItemUI.java:943)
    	at java.awt.Component.processMouseEvent(Component.java:5100)
    	at java.awt.Component.processEvent(Component.java:4897)
    	at java.awt.Container.processEvent(Container.java:1569)
    	at java.awt.Component.dispatchEventImpl(Component.java:3615)
    	at java.awt.Container.dispatchEventImpl(Container.java:1627)
    	at java.awt.Component.dispatchEvent(Component.java:3477)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
    	at java.awt.Container.dispatchEventImpl(Container.java:1613)
    	at java.awt.Window.dispatchEventImpl(Window.java:1606)
    	at java.awt.Component.dispatchEvent(Component.java:3477)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
    	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
    Je n'arrive pas à voir comment lire mon xml.... m^me avec l'unmashaller que j'ai créer..


    Eh oui ..... je suis vraiment débutant


  9. #9
    Membre éprouvé
    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
    Points : 935
    Points
    935
    Par défaut
    salut,

    Premier problème :
    comme tu as changé le fichier de mapping, il ne correspond plus au flux

    il faut donc changer le flux ou le régéner par l'opération d'écriture (marschal)

    Deuxième problème la lecture ne va pas retourner un canari (mais l'Annee et donc la liste des canaris)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Annee)unmarshaller.unmarshal(reader);

  10. #10
    Membre habitué 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 : 43
    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
    Points : 185
    Points
    185
    Par défaut
    si je comprend bien, il faut écrire dans la class, un mashaller et un unmarshaller ???

    Genre:

    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
     
    import java.io.*; 
     
    import org.exolab.castor.xml.*; 
    import org.exolab.castor.mapping.*;
     
    public class LectureBaseAnnee {
     
        void lireBaseAnnee() { 
     
     
            File file = new File("C:\\travail\\test.xml");
            Annee liste= new Annee();
            Reader reader = null;
            Writer writer = null;
            try { 
               writer = new FileWriter(file);
               reader = new FileReader(file); 
               //getsion du mapping 
               Mapping mapping = new Mapping(); 
               mapping.loadMapping("C:\\travail\\fichierMapping.xml"); // Fichier de mapping 
               //gestion du marshaller 
               Marshaller marshaller = new Marshaller(writer); 
               //gestion du unmarshaller 
               Unmarshaller unmarshaller = new Unmarshaller(reader); 
               //on affecte au marshaller le mapping 
               unmarshaller.setMapping(mapping);  
               (liste).unmarshaller.unmarshal(reader); 
     
     
            } catch (MarshalException me) { 
               me.printStackTrace(); 
               System.exit(0); 
            } catch (ValidationException ve) { 
               ve.printStackTrace(); 
               System.exit(0); 
            } catch (IOException ioe) { 
               ioe.printStackTrace(); 
               System.exit(0); 
            } catch (org.exolab.castor.mapping.MappingException ioe) { 
               ioe.printStackTrace(); 
              System.exit(0); 
           } 
        }  
    }
    ??? :

  11. #11
    Membre éprouvé
    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
    Points : 935
    Points
    935
    Par défaut
    Non le principe est :

    La lecture est le contraire de l'ecriture

    Donc tu ne peux lire que ce que tu écrit si tu change entre les deux ca marche plus dans (donc dans ton cas il faut avant de pouvoir relire le fichier test.xml le regénérer en utilisant si mes souvenir sont bon ta classe Main)

  12. #12
    Membre habitué 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 : 43
    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
    Points : 185
    Points
    185
    Par défaut
    J'ai renommé la class "Main.java" par "CreationBAseAnnee.java" pour des raisons de compréhension lors de la suite de la programmation.

    Le code parle de lui-même:
    CreationBaseAnnee.java ( ancien "Main.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
     
    import java.io.*; 
    import org.exolab.castor.xml.*; 
    import org.exolab.castor.mapping.*;
     
    public class CreationBaseAnnee { 
     
           void creerBaseAnnee() { 
    canari titi=new canari("titi","mâle",1212,58,2004); 
            canari mimie=new canari("mimie","femelle",5608,32,2003); 
            Annee liste= new Annee(); 
            liste.addCanari(titi); 
            liste.addCanari(mimie); 
            File file = new File("C:\\travail\\test.xml"); 
            Writer writer = null; 
            try { 
               writer = new FileWriter(file); 
               //getsion du mapping 
               Mapping mapping = new Mapping(); 
               mapping.loadMapping("C:\\travail\\fichierMapping.xml"); // c'est ton fichier de mapping 
               //gestion du marshaller 
               Marshaller marshaller = new Marshaller(writer); 
               //on affecte au marshaller le mapping 
               marshaller.setMapping(mapping); 
               marshaller.setEncoding("ISO-8859-1"); 
               marshaller.marshal(liste); 
            } catch (MarshalException me) { 
               me.printStackTrace(); 
               System.exit(0); 
            } catch (ValidationException ve) { 
               ve.printStackTrace(); 
               System.exit(0); 
            } catch (IOException ioe) { 
               ioe.printStackTrace(); 
               System.exit(0); 
            } catch (org.exolab.castor.mapping.MappingException ioe) { 
               ioe.printStackTrace(); 
              System.exit(0); 
           } 
        }  
     
    }
    canari.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
     
    public class canari { 
     
       private String nom; 
        private String sexe; 
        private int stam; 
        private int bague; 
        private int year; 
     
       public canari() {} 
     
       public canari(String nom,String sexe,int stam,int bague, int year) { 
          setNom(nom);
          setSexe(sexe);
          setStam(stam);
          setBague(bague);
          setYear(year);
       } 
     
       public void setNom(String nom) { 
          this.nom=nom; 
       } 
       public String getNom() { 
          return nom; 
       } 
     
       public void setSexe(String sexe) { 
          this.sexe=sexe; 
       } 
       public String getSexe() { 
          return sexe; 
       } 
     
       public void setStam(int stam) { 
          this.stam=stam; 
       } 
       public int getStam() { 
          return stam; 
       } 
     
       public void setBague(int bague) { 
          if (bague<=0) { 
             System.err.println("Erreur : Bague négative  !"); 
                System.exit(0); 
            } 
           else { 
              this.bague=bague; 
           } 
          }  
       public int getBague() { 
          return bague; 
       } 
     
       public void setYear(int year) { 
          this.year=year; 
       } 
       public int getYear() { 
          return year; 
       }       
     
       void affiche() { 
             System.out.println("Nom: "+nom+" - Sexe:"+sexe+" - Stam:"+stam+" - Numéro de bague :"+bague+" - Année :"+year); 
          } 
    }
    et

    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
     
    import java.util.ArrayList; 
    import java.util.List; 
     
    public class Annee { 
     
       private List Annee = new ArrayList(); 
     
       public Annee() { 
          super(); 
       } 
     
       public void addCanari(canari unefiche) { 
          Annee.add(unefiche); 
       } 
     
       public List getAnnee() { 
          return Annee; 
       } 
     
       public void setAnnee(List Annee) { 
          this.Annee = Annee; 
       } 
    }

    Je tiens encore à remerceier pour l'aide précieuse que tu m'as apporté pour construire et comprendre le code.

    Présentement, j'ai créer une class identique à "CreationBaseAnnee" avec un unmarshaller en plus pour lire le xml généré.
    Cette nouvelle class se nomme : "LectureBaseAnnee"

    LectureBaseAnne.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
     
    import java.io.*; 
     
    import org.exolab.castor.xml.*; 
    import org.exolab.castor.mapping.*;
     
    public class LectureBaseAnnee {
     
        void lireBaseAnnee() { 
     
            canari titi=new canari("titi","mâle",1212,58,2004); 
            canari mimie=new canari("mimie","femelle",5608,32,2003); 
            Annee liste= new Annee(); 
            liste.addCanari(titi); 
            liste.addCanari(mimie); 
            File file = new File("C:\\travail\\test.xml");
            Reader reader = null;
            Writer writer = null;
            try { 
               writer = new FileWriter(file);
               reader = new FileReader(file); 
               //getsion du mapping 
               Mapping mapping = new Mapping(); 
               mapping.loadMapping("C:\\travail\\fichierMapping.xml"); // Fichier de mapping 
               //gestion du marshaller
               Marshaller marshaller = new Marshaller(writer);
               //on affecte au marshaller le mapping 
               marshaller.setMapping(mapping); 
               marshaller.setEncoding("ISO-8859-1"); 
               marshaller.marshal(liste);
               //gestion du unmarshaller 
               Unmarshaller unmarshaller = new Unmarshaller(reader); 
               //on affecte au marshaller le mapping 
               unmarshaller.setMapping(mapping);   
               unmarshaller.unmarshal(reader);
     
     
            } catch (MarshalException me) { 
               me.printStackTrace(); 
               System.exit(0); 
            } catch (ValidationException ve) { 
               ve.printStackTrace(); 
               System.exit(0); 
            } catch (IOException ioe) { 
               ioe.printStackTrace(); 
               System.exit(0); 
            } catch (org.exolab.castor.mapping.MappingException ioe) { 
               ioe.printStackTrace(); 
              System.exit(0); 
           } 
        }  
    }
    J'ai cette lorsque j'execute LectureBaseAnnee, j'ai les erreurs suivante:
    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
     
    java.lang.NullPointerException
    	at org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:1635)
    	at org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:1292)
    	at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    	at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:605)
    	at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:513)
    	at LectureBaseAnnee.lireBaseAnnee(LectureBaseAnnee.java:34)
    	at Action.actionPerformed(Action.java:32)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
    	at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
    	at javax.swing.AbstractButton.doClick(AbstractButton.java:289)
    	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1113)
    	at javax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseReleased(BasicMenuItemUI.java:943)
    	at java.awt.Component.processMouseEvent(Component.java:5100)
    	at java.awt.Component.processEvent(Component.java:4897)
    	at java.awt.Container.processEvent(Container.java:1569)
    	at java.awt.Component.dispatchEventImpl(Component.java:3615)
    	at java.awt.Container.dispatchEventImpl(Container.java:1627)
    	at java.awt.Component.dispatchEvent(Component.java:3477)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
    	at java.awt.Container.dispatchEventImpl(Container.java:1613)
    	at java.awt.Window.dispatchEventImpl(Window.java:1606)
    	at java.awt.Component.dispatchEvent(Component.java:3477)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
    	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
    le xml est correctement créer...

  13. #13
    Membre habitué 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 : 43
    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
    Points : 185
    Points
    185
    Par défaut
    J'ai réussi à supprimer les erreurs

    j'ai modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     unmarshaller.unmarshal(reader);
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unmarshaller.unmarshal(Annee.class , reader);
    Par contre, comment puis-je faire pour savoir si j'arrive rééllement à lire les données du fichier test.xml???

    Si j'ai bien compris, on est obligé d'écrire puis de lire.... Hors si je fais :
    titi.affiche();
    Il m'affichera ce que je viens d'écrire.... je ne peux donc pas savoir si je lis le fichier.xml ou si je lis simplement les outputs que je viens d'éffectuer....



  14. #14
    Membre éprouvé
    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
    Points : 935
    Points
    935
    Par défaut
    Voici le code que j'ai fait et qui marche :
    Reste ensuite à le faire evoluer afin que tu puisses parametrer le fichier d'écriture ...

    ceci utilise la classe canari ,déja faite et le fichier xml de mapping (déjà fait aussi )

    voici la nouvelle version de la classe Annee
    ATTENTION j'ai renommé l'attribut Annee en annee c'est plus propre)
    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
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
     
    import org.exolab.castor.mapping.Mapping;
    import org.exolab.castor.mapping.MappingException;
    import org.exolab.castor.xml.MarshalException;
    import org.exolab.castor.xml.Marshaller;
    import org.exolab.castor.xml.Unmarshaller;
    import org.exolab.castor.xml.ValidationException; 
     
    public class Annee { 
     
       private List annee = new ArrayList(); 
     
       public Annee() { 
          super(); 
       } 
     
       public void addCanari(canari unCanari) { 
          annee.add(unCanari); 
       } 
     
    	public List getAnnee() {
    		return annee;
    	}
     
    	public void setAnnee(List annee) {
    		annee = annee;
    	}
     
    	public void ecrire(){
            File file = new File("c:\\travail\\test.xml"); 
            Writer writer = null; 
            try { 
               writer = new FileWriter(file); 
               //getsion du mapping 
               Mapping mapping = new Mapping(); 
               mapping.loadMapping("C:\\travail\\fichierMapping.xml"); // c'est ton fichier de mapping 
               //gestion du marshaller 
               Marshaller marshaller = new Marshaller(writer); 
               //on affecte au marshaller le mapping 
               marshaller.setMapping(mapping); 
               marshaller.setEncoding("ISO-8859-1"); 
               marshaller.marshal(this); 
            } catch (MarshalException me) { 
               me.printStackTrace(); 
               System.exit(0); 
            } catch (ValidationException ve) { 
               ve.printStackTrace(); 
               System.exit(0); 
            } catch (IOException ioe) { 
               ioe.printStackTrace(); 
               System.exit(0); 
            } catch (org.exolab.castor.mapping.MappingException ioe) { 
               ioe.printStackTrace(); 
               System.exit(0); 
            } 
    	}
     
    	public static Annee lire(){
            File file = new File("c:\\travail\\test.xml"); 
            Annee liste=null;
    		try {
    			    FileReader reader = new FileReader(file); 
    			       //getsion du mapping 
    			   Mapping mapping = new Mapping(); 
    			   mapping.loadMapping("C:\\travail\\fichierMapping.xml"); // c'est ton fichier de mapping 
    			       //gestion du marshaller 
    			       Unmarshaller unmarshaller = new Unmarshaller(mapping); 
    			       //on affecte au marshaller le mapping 
    			       liste = (Annee)unmarshaller.unmarshal(Annee.class,reader);
    		} catch (MarshalException e) {
               e.printStackTrace(); 
               System.exit(0); 
    		} catch (FileNotFoundException e) {
               e.printStackTrace(); 
               System.exit(0); 
    		} catch (ValidationException e) {
               e.printStackTrace(); 
               System.exit(0); 
    		} catch (IOException e) {
               e.printStackTrace(); 
               System.exit(0); 
    		} catch (MappingException e) {
               e.printStackTrace(); 
               System.exit(0); 
    		}
    		return liste;
     
    	}
     
    	public static void main(String[] args) {
    		//exemple d'utilisation
    		//création
    		canari titi=new canari("titi","mâle",1212,58,2004); 
            canari mimie=new canari("mimie","femelle",5608,32,2003); 
            Annee liste= new Annee(); 
            liste.addCanari(titi); 
            liste.addCanari(mimie); 
            //ecriture
            liste.ecrire();
            //lecture l'une année
            Annee lecture = Annee.lire();
            for(Iterator ite=lecture.getAnnee().iterator();ite.hasNext();){
            	canari unCanari = (canari) ite.next();
            	unCanari.affiche();
            }
            //modification d'un canari  (ici le premier)
           	canari unCanari = (canari) lecture.getAnnee().get(0);
           	unCanari.setNom("grosMinet"); // changementdu nom par exemple (titi devient grosMinet ;-))
           	lecture.ecrire();// enregistrement de la modification dans le fichier xml
            //.....
    	}
     
     
    }
    bonne continuation

  15. #15
    Membre habitué 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 : 43
    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
    Points : 185
    Points
    185
    Par défaut
    Wouhhhhhhhh

    Merci beaucoup....pour le code.... de plus, il est compréhensible pour un débutant comme moi....

    J'avance.... j'avance !


    Je vais jouer un peu avec mon code

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

Discussions similaires

  1. Lire fichier XML en java
    Par loop4 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 17/05/2006, 16h46
  2. Lire un xml avec javascript et generer code html ?
    Par zevince dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/04/2006, 11h45
  3. [Ant]Lire un XML - renvoyer un tableau de valeurs
    Par gael.poffet dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 06/03/2006, 15h32
  4. [XSL]Importer et lire un .xml se trouvant sur un serveur...
    Par akaii dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 25/01/2006, 08h38
  5. []générer et LIRE du xml avec vb: sélection d'un node
    Par chris21 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 19/09/2003, 13h14

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