Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1444 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  parser un fichier xml en java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

parser un fichier xml en java

n°967976
royou1
bordeaux dans le coeur
Posté le 01-02-2005 à 10:10:01  profilanswer
 

Bonjour a tous je dois réaliser le parsing d'un fichier xml d'une petite application en vue de l'utiliser plus tard dans mon projet.  
Mon projet va consister a recuperer des documents xml d'un coollegue et de les parser pour recuperer des données du genre route intersection stop.... pour ensuite les transmettre a un collegue qui va dessiner la carte en question.  
dans la tache confié on doit recuperer une route et 2 intersections voila mon code  

Code :
  1. Code:
  2. * carteHandler.java
  3. *
  4. * Created on 27 janvier 2005, 16:40
  5. */
  6. package tacheparseur;
  7. import org.xml.sax.*;
  8. import org.xml.sax.helpers.*;
  9. import javax.xml.parsers.*;
  10. import java.io.*;
  11. import java.util.*;
  12. /**  
  13. *  
  14. * @author  royal  
  15. */
  16. public class CarteHandler extends DefaultHandler{
  17.    //résultats de notre parsing  
  18.    private List<carte> projet;
  19.    private carte carte;
  20.    //flags nous indiquant la position du parseur  
  21.    private boolean inProjet, inCarte, inRoute, inIntersection;
  22.    
  23.    // simple constructeur  
  24.    public CarteHandler(){
  25.       super();   
  26.      
  27.    }
  28.    //détection d'ouverture de balise  
  29.    public void startElement(String uri,
  30.                          String localName,
  31.                          String qName,
  32.                          Attributes attributes)
  33.                   throws SAXException{
  34.       System.out.println(uri+" "+localName+" "+qName);
  35.       if(qName.equals("projet" )){
  36.          projet = new LinkedList<carte>();
  37.          inProjet = true;
  38.       }else if(qName.equals("carte" )){
  39.          carte = new carte();
  40.          try{
  41.             int id = Integer.parseInt(attributes.getValue("id" ));
  42.             carte.setId(id);
  43.          }catch(Exception e){
  44.             //erreur, le contenu de id n'est pas un entier  
  45.             throw new SAXException(e);
  46.          }
  47.          inCarte = true;   
  48.       }else if(qName.equals("route" )){
  49.          inRoute = true;   
  50.       }else if(qName.equals("intersection" )){
  51.          inIntersection = true;   
  52.       }else{
  53.          //erreur, on peut lever une exception  
  54.          throw new SAXException("Balise "+qName+" inconnue." );   
  55.       }
  56.    }
  57.    //détection fin de balise  
  58.    public void endElement(String uri,
  59.                        String localName,
  60.                        String qName)
  61.                 throws SAXException{
  62.       if(qName.equals("projet" )){
  63.          inProjet = false;
  64.       }else if(qName.equals("carte" )){
  65.           projet.add(carte);
  66.           carte = null;
  67.          inCarte = false;   
  68.       }else if(qName.equals("route" )){
  69.          inRoute = false;   
  70.       }else if(qName.equals("intersection" )){
  71.          inIntersection = false;     
  72.       }else{
  73.          //erreur, on peut lever une exception  
  74.          throw new SAXException("Balise "+qName+" inconnue." );   
  75.       }             
  76.    }
  77.    //détection de caractères  
  78.    public void characters(char[] ch,
  79.                        int start,
  80.                        int length)
  81.                 throws SAXException{
  82.       String lecture = new String(ch,start,length);
  83.       if(inRoute){
  84.         carte.setRoute(lecture);   
  85.       }else if(inIntersection){
  86.          carte.setIntersection(lecture);   
  87.       }         
  88.    }
  89.    //début du parsing  
  90.    public void startDocument() throws SAXException {
  91.         System.out.println("Début du parsing" );
  92.    }
  93.    //fin du parsing  
  94.    public void endDocument() throws SAXException {
  95.         System.out.println("Fin du parsing" );
  96.         System.out.println("Resultats du parsing" );
  97.         for(carte p : projet){
  98.            System.out.println(p);
  99.         }
  100.    }
  101.    
  102.    // test  
  103.    public static void main(String[] args){
  104.       try{
  105.          // création d'une fabrique de parseurs SAX  
  106.          SAXParserFactory fabrique = SAXParserFactory.newInstance();
  107.          
  108.          // création d'un parseur SAX  
  109.          SAXParser parseur = fabrique.newSAXParser();
  110.          
  111.          // lecture d'un fichier XML avec un DefaultHandler  
  112.          File fichier = new File("./src/tacheparseur/carte.xml" );
  113.          DefaultHandler gestionnaire = new CarteHandler();
  114.          parseur.parse(fichier, gestionnaire);
  115.      
  116.       }catch(ParserConfigurationException pce){
  117.          System.out.println("Erreur de configuration du parseur" );
  118.          System.out.println("Lors de l'appel à SAXParser.newSAXParser()" );
  119.       }catch(SAXException se){
  120.          System.out.println("Erreur de parsing" );
  121.          System.out.println("Lors de l'appel à parse()" );
  122.          se.printStackTrace();
  123.       }catch(IOException ioe){
  124.          System.out.println("Erreur d'entrée/sortie" );
  125.          System.out.println("Lors de l'appel à parse()" );
  126.       }
  127.    }   
  128. }


 
avec sa classe:  

Code :
  1. Code:
  2. package tacheparseur;
  3. /**  
  4. *  
  5. * @author  royal  
  6. */
  7. public class carte {
  8.      private int id;
  9.      private String route,intersection;
  10.     /** Creates a new instance of carte */
  11.     public carte() {
  12.          
  13.     }
  14.      public int getId(){
  15.        return id;
  16.    }
  17.    public String getRoute(){
  18.        return route;
  19.    }
  20.    public String getIntersection(){
  21.        return intersection;
  22.    }
  23.     public void setId(int id){
  24.        this.id = id;
  25.    }
  26.     public void setRoute(String route){
  27.        this.route = route;
  28.    }
  29.    public void setIntersection(String intersection){
  30.        this.intersection = intersection;
  31.    }
  32.    public String toString(){
  33.       return new StringBuffer("Route : " ).append(route).append(", " )
  34.       .append("Intersection : " ).append(intersection) .toString();
  35.    }
  36. }


 
et son fichier xml:  

Code :
  1. Code:
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <!--
  4.     Document   : carte.xml
  5.     Created on : 27 janvier 2005, 15:11
  6.     Author     : royal
  7.     Description:
  8.         Purpose of the document follows.
  9. -->
  10. <projet>
  11. <carte id="0">
  12.         <route>N195 </route>
  13.         <intersection>x:33,y:25</intersection>
  14.         <intersection>x:63,y:33</intersection>
  15.        
  16. </carte>
  17. </projet>


 
le probleme et que je recupere la route mais qu'une seule intersection et je sais pas pourkoi.  
 
resultat:  

Code :
  1. Code:
  2. init:
  3. deps-jar:
  4. compile-single:
  5. run-single:
  6. Début du parsing
  7.   projet
  8.   carte
  9.   route
  10.   intersection
  11.   intersection
  12. Fin du parsing
  13. Resultats du parsing
  14. Route : N195 , Intersection : x:63,y:33
  15. BUILD SUCCESSFUL (total time: 0 seconds)

mood
Publicité
Posté le 01-02-2005 à 10:10:01  profilanswer
 

n°968156
teut
Posté le 01-02-2005 à 11:45:50  profilanswer
 

Ben a chaque fois que tu rencontre une intersection, tu fais un set qui en fait ecrase la chaine de caracteres de la precedente intersection... Utilise une collection au lieu d'une chaine de caractere dans la classe carte, et change les methodes set et get l'attribut intersection.

n°968158
archangel
Un homme Une vision
Posté le 01-02-2005 à 11:46:24  profilanswer
 

C'est lorsque tu appelles setIntersection() pour la premère fois tu enregistres la première intersection. Puis quand tu rappelles setIntersection() pour la deuxième fois, tu enregistres la seconde intersection par dessus la première.
 
Bien entendu la troisième écrasera la seconde et ainsi de suite.
 
Edit: bon ben grillé  [:cupra]


Message édité par archangel le 01-02-2005 à 11:46:55

---------------
J'suis timide - Prêt à mourir, mais pas à vivre - Je suis vraiement très fatigué ... - more than meets the eye
n°970683
royou1
bordeaux dans le coeur
Posté le 03-02-2005 à 15:23:59  profilanswer
 

ben voila jai fait des modifications par rapport a vos suggestions et par rapport au fichier xml de mes collegues pour m'adapter donc voila:
 
la nouvelle classe carte:

Code :
  1. package tacheparseur;
  2. import java.util.*;
  3. /**
  4. *
  5. * @author  royal
  6. */
  7. public class carte {
  8.      private int id;
  9.      private List<route> routes;
  10.      private List<intersection> intersections;
  11.     /** Creates a new instance of carte */
  12.     public carte() {
  13.        
  14.     }
  15.      public int getId(){
  16.        return id;
  17.    }
  18.    public List<route> getRoute(){
  19.        return routes;
  20.    }
  21.    public List<intersection> getIntersection(){
  22.        return intersections;
  23.    }
  24.     public void setId(int id){
  25.        this.id = id;
  26.    }
  27.     public void setRoute(List<route> routes){
  28.        this.routes = routes; 
  29.    }
  30.    public void setIntersection(List<intersection> intersections){
  31.        this.intersections = intersections;
  32.    }
  33.    public String toString(){
  34.       return new StringBuffer("Route : " ).append(routes).append(", " )
  35.       .append("Intersection : " ).append(intersections) .toString();
  36.    }
  37. }


 
l'ajout d' une classe intersection:

Code :
  1. package tacheparseur;
  2. /**
  3. *
  4. * @author  royal
  5. */
  6. public class intersection extends carte {
  7.    private int id;
  8.    private int x,y;
  9.     /** Creates a new instance of intersection */
  10.     public intersection() {
  11.     }
  12.       public int getId(){
  13.        return id;
  14.    }
  15.      public void setId(int id){
  16.        this.id = id;
  17.    }
  18.     public int getX(){
  19.        return x;
  20.    }
  21.    public int getY(){
  22.        return y;
  23.    }
  24.     public void setX(int x){
  25.        this.x = x;
  26.    }
  27.    public void setY(int y){
  28.        this.y = y;
  29.    }
  30.    public String toString(){
  31.       return new StringBuffer("x : " ).append(x).append(", " )
  32.       .append("y : " ).append(y) .toString();
  33.    }
  34. }


 
ajout d'une nouvelle classe route:

Code :
  1. package tacheparseur;
  2. /**
  3. *
  4. * @author  royal
  5. */
  6. public class route extends carte{
  7.     private int id;
  8.     private String nom;
  9.     /** Creates a new instance of route */
  10.     public route() {
  11.        
  12.     }
  13.     public String getNom(){
  14.         return nom;
  15.     }
  16.     public int getId(){
  17.        return id;
  18.     }
  19.     public void setNom(String nom){
  20.         this.nom = nom;
  21.     }
  22.      public void setId(int id){
  23.        this.id = id;
  24.    }
  25.     public String toString(){
  26.       return new StringBuffer("nom:" ).append(nom).toString();
  27.    }
  28. }


 
la modif de carteHandler:

Code :
  1. package tacheparseur;
  2. import org.xml.sax.*;
  3. import org.xml.sax.helpers.*;
  4. import javax.xml.parsers.*;
  5. import java.io.*;
  6. import java.util.*;
  7. import java.lang.*;
  8. /**
  9. *
  10. * @author  royal
  11. */
  12. public class CarteHandler extends DefaultHandler{
  13.    //résultats de notre parsing
  14.    private List<route> routes;
  15.    private List<intersection> intersections;
  16.    private carte carte;
  17.    private route laRoute;
  18.    private intersection laIntersection;
  19.    //flags nous indiquant la position du parseur
  20.    private boolean  inCarte, inRoute,inNom, inIntersection,inX,inY;
  21.  
  22.    // simple constructeur
  23.    public CarteHandler(){
  24.       super();
  25.      
  26.    }
  27.    //détection d'ouverture de balise
  28.    public void startElement(String uri,
  29.                          String localName,
  30.                          String qName,
  31.                          Attributes attributes)
  32.                   throws SAXException{
  33.       System.out.println(uri+" "+localName+" "+qName);
  34.       if(qName.equals("carte" )){
  35.          routes = new LinkedList<route>();
  36.          intersections = new LinkedList<intersection>();
  37.          inCarte = true;
  38.       }else if(qName.equals("route" )){
  39.         laRoute = new route();
  40.       }else if(qName.equals("intersection" )){
  41.         laIntersection = new intersection();
  42.          try{
  43.             int id = Integer.parseInt(attributes.getValue("id" ));
  44.             carte.setId(id);
  45.          }
  46.          catch(Exception e){
  47.           //erreur, le contenu de id n'est pas un entier
  48.             throw new SAXException(e);
  49.          }
  50.          inCarte = true;
  51.       }else if(qName.equals("route" )){
  52.          inRoute = true;
  53.       }else if(qName.equals("nom" )){
  54.          inNom = true;
  55.       }else if(qName.equals("intersection" )){
  56.          inIntersection = true;
  57.       }else if(qName.equals("x" )){
  58.          inX = true;
  59.       }else if(qName.equals("y" )){
  60.          inY = true;
  61.       } else{
  62.          //erreur, on peut lever une exception
  63.          throw new SAXException("Balise "+qName+" inconnue." );
  64.       }
  65.    }
  66.    //détection fin de balise
  67.    public void endElement(String uri,
  68.                        String localName,
  69.                        String qName)
  70.                 throws SAXException{
  71.       if(qName.equals("carte" )){
  72.          inCarte = false;
  73.       }else if(qName.equals("route" )){
  74.         routes.add(laRoute);
  75.         routes = null;
  76.          inRoute = false;
  77.       }else if(qName.equals("nom" )){
  78.          inNom = false;
  79.       }else if(qName.equals("intersection" )){
  80.          intersections.add(laIntersection);
  81.          intersections = null;
  82.          inIntersection = false;
  83.       }else if(qName.equals("x" )){
  84.          inX = false;
  85.       }else if(qName.equals("y" )){
  86.          inY = false;
  87.       }else{
  88.          //erreur, on peut lever une exception
  89.          throw new SAXException("Balise "+qName+" inconnue." );
  90.       }         
  91.    }
  92.    //détection de caractères
  93.    public void characters(char[] ch,
  94.                        int start,
  95.                        int length)
  96.                 throws SAXException{
  97.       String lecture = new String(ch,start,length);
  98.    
  99.       if(inNom){
  100.          laRoute.setNom(lecture);
  101.       }else if(inX){
  102.          laIntersection.setX(Integer.parseInt(lecture));
  103.       }else if(inY){
  104.          laIntersection.setY(Integer.parseInt(lecture));
  105.       }
  106.    }
  107.    //début du parsing
  108.    public void startDocument() throws SAXException {
  109.       System.out.println("Début du parsing" );
  110.    }
  111.    //fin du parsing
  112.    public void endDocument() throws SAXException {
  113.       System.out.println("Fin du parsing" );
  114.       System.out.println("Resultats du parsing" );
  115.       for(route p : routes){
  116.          System.out.println(p);
  117.       }
  118.           for(intersection p : intersections){
  119.              System.out.println(p);
  120.           }
  121.    }
  122.  
  123.    // test
  124.    public static void main(String[] args){
  125.       try{
  126.          // création d'une fabrique de parseurs SAX
  127.          SAXParserFactory fabrique = SAXParserFactory.newInstance();
  128.          // création d'un parseur SAX
  129.          SAXParser parseur = fabrique.newSAXParser();
  130.          // lecture d'un fichier XML avec un DefaultHandler
  131.          File fichier = new File("./src/tacheparseur/carte.xml" );
  132.          DefaultHandler gestionnaire = new CarteHandler();
  133.          parseur.parse(fichier, gestionnaire);
  134.       }catch(ParserConfigurationException pce){
  135.          System.out.println("Erreur de configuration du parseur" );
  136.          System.out.println("Lors de l'appel à SAXParser.newSAXParser()" );
  137.       }catch(SAXException se){
  138.          System.out.println("Erreur de parsing" );
  139.          System.out.println("Lors de l'appel à parse()" );
  140.          se.printStackTrace();
  141.       }catch(IOException ioe){
  142.          System.out.println("Erreur d'entrée/sortie" );
  143.          System.out.println("Lors de l'appel à parse()" );
  144.       }
  145.    }
  146. }


 
le fichier xml:

Code :
  1. <carte id="0">
  2.         <route id="1">
  3.         <nom>N195</nom>
  4.         </route>
  5.         <intersection id="33">
  6.             <x>33</x>
  7.             <y>69</y>
  8.         </intersection>
  9.         <intersection id="35">
  10.             <x>25</x>
  11.             <y>17</y>
  12.         </intersection>
  13. </carte>


 
il n'y a aucune erreur de compilation, mais a l'execution j'ai une erreur de parsing et je sai pas d'ou sa vient:

Code :
  1. init:
  2. deps-jar:
  3. compile-single:
  4. run-single:
  5. Début du parsing
  6.   carte
  7.   route
  8.   nom
  9.   intersection
  10. Erreur de parsing
  11. Lors de l'appel à parse()
  12. java.lang.NullPointerException
  13. at tacheparseur.CarteHandler.startElement(CarteHandler.java:54)
  14. at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:533)
  15. at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:878)
  16. at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693)
  17. at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
  18. at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
  19. at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
  20. at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
  21. at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
  22. at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
  23. at javax.xml.parsers.SAXParser.parse(SAXParser.java:311)
  24. at tacheparseur.CarteHandler.main(CarteHandler.java:141)
  25. BUILD SUCCESSFUL (total time: 0 seconds)

n°970896
teut
Posté le 03-02-2005 à 17:30:08  profilanswer
 

oula tu as changé pas mal de choses... je pensais a juste qq petits changements mineurs, comme le changement de la chaine de caractères intersection par une collection et au lieu d'une methode set, tu aurais utilisé une methode add...
Sinon pour ton erreur je pense qu'elle provient du fait que ta carte n'est jamais initialisée...
Alors au moment ou tu rencontres l'intersection tu set l'id de l'intersection sur la carte (pourquoi sur la carte et pas sur l'intersection ???), et comme la carte est nulle, ben tu te retrouves avec une belle exception.
Sinon y'a des trucs que je comprends pas :
 - pourquoi avoir compliqué autant par rapport à la première version ?
 - tes extends de carte au niveau des classes intersection et route qui pour moi sont superflues, car bon des intersection et des routes ne sont pas des cartes étendues...

n°970915
teut
Posté le 03-02-2005 à 17:41:46  profilanswer
 

Bon je viens de relire un petit coup, alors meme si tu repares l'exception je pense qu'il y a pas mal de choses qui ne vont pas dans ton programme :  
 - tu ne fais aucun appel à la méthode carte.setIntersection, ni setRoutes d'ailleurs, donc tu ne remplis jamais ton objet.
 - A chaque fois que tu rencontres un noeud intersection, tu reinitialise une intersection, ce qui est normal, puis quand tu rencontre le tag de fermeture, tu l'ajoute dans la collection, jusque la je comprend, après le fait de perdre la référence que tu as sur la collection en faisant un intersection = null, ben la je vois pas l'interet... surtout que à l'intersection suivante quand tu vas essayer de faire le add sur la collection, tu vas te retrouver avec une Exception...
En gros je pense qu'il y'a pas mal de chose a revoir, car visiblement tu fais les mêmes erreurs au niveau des routes...

n°970956
glod 2
Votre trajet, notre projet.
Posté le 03-02-2005 à 18:28:10  profilanswer
 

si le truc c'est de faire object java -> xml -> objet java, ou même juste xml -> object java, matte du coté d'xstream, tu feras en 2 lignes de code ce que tu fais là en une classe (même si c'est toujours interressant à faire pour l'amour de l'art ;) )

n°974093
royou1
bordeaux dans le coeur
Posté le 07-02-2005 à 14:53:18  profilanswer
 

je suis désolé mais je comprend pas tout ce que tu m'a expliqué teut

n°974102
benou
Posté le 07-02-2005 à 15:00:16  profilanswer
 

doit y avoir un problème : la ligne 54 de CarteHandler ne peut pas générer une NullPointerException ...
t'es sûr que c'est bien le code que tous nous a posté que tu executes ?


---------------
ma vie, mon oeuvre - HomePlayer
n°974125
royou1
bordeaux dans le coeur
Posté le 07-02-2005 à 15:21:18  profilanswer
 

ben oui c le mini projet de validation de nouvelle technologie que j'ai posté

mood
Publicité
Posté le 07-02-2005 à 15:21:18  profilanswer
 

n°974177
royou1
bordeaux dans le coeur
Posté le 07-02-2005 à 16:00:04  profilanswer
 

en fait j'ai compris pour le cas ou je mets intersection = null et pareil pour route = null.
mais je comprend pas ou mettre les carte.setIntersection et carte.setRoute

n°975066
royou1
bordeaux dans le coeur
Posté le 08-02-2005 à 08:40:24  profilanswer
 

bon ben saye j'ai le programme ki marche:  
alors j'ai enleve les = null comme me la dit teut puis j'ai modifié carte.setId() par route.setId()  
voila le carteHandler modifié:

Code :
  1. /*
  2. * carteHandler.java
  3. *
  4. * Created on 27 janvier 2005, 16:40
  5. */
  6. package tacheparseur;
  7. import org.xml.sax.*;
  8. import org.xml.sax.helpers.*;
  9. import javax.xml.parsers.*;
  10. import java.io.*;
  11. import java.util.*;
  12. import java.lang.*;
  13. /**
  14. *
  15. * @author  royal
  16. */
  17. public class CarteHandler extends DefaultHandler{
  18.    //résultats de notre parsing
  19.    private List<route> routes;
  20.    private List<intersection> intersections;
  21.    private carte carte;
  22.    private route laRoute;
  23.    private intersection laIntersection;
  24.    //flags nous indiquant la position du parseur
  25.    private boolean  inCarte, inRoute,inNom, inIntersection,inX,inY;
  26.  
  27.    // simple constructeur
  28.    public CarteHandler(){
  29.       super();
  30.      
  31.    }
  32.    //détection d'ouverture de balise
  33.    public void startElement(String uri,
  34.                          String localName,
  35.                          String qName,
  36.                          Attributes attributes)
  37.                   throws SAXException{
  38.       System.out.println(uri+" "+localName+" "+qName);
  39.       if(qName.equals("carte" )){
  40.          routes = new LinkedList<route>();
  41.          intersections = new LinkedList<intersection>();
  42.          inCarte = true;
  43.       }else if(qName.equals("route" )){
  44.         laRoute = new route();
  45.       }else if(qName.equals("intersection" )){
  46.         laIntersection = new intersection();
  47.          try{
  48.             int id = Integer.parseInt(attributes.getValue("id" ));
  49.            laRoute.setId(id);
  50.          }
  51.          catch(Exception e){
  52.           //erreur, le contenu de id n'est pas un entier
  53.             throw new SAXException(e);
  54.          }
  55.          inCarte = true;
  56.       }else if(qName.equals("route" )){
  57.          inRoute = true;
  58.       }else if(qName.equals("nom" )){
  59.          inNom = true;
  60.       }else if(qName.equals("intersection" )){
  61.          inIntersection = true;
  62.       }else if(qName.equals("x" )){
  63.          inX = true;
  64.       }else if(qName.equals("y" )){
  65.          inY = true;
  66.       } else{
  67.          //erreur, on peut lever une exception
  68.          throw new SAXException("Balise "+qName+" inconnue." );
  69.       }
  70.    }
  71.    //détection fin de balise
  72.    public void endElement(String uri,
  73.                        String localName,
  74.                        String qName)
  75.                 throws SAXException{
  76.       if(qName.equals("carte" )){
  77.          inCarte = false;
  78.       }else if(qName.equals("route" )){
  79.         routes.add(laRoute);
  80.          inRoute = false;
  81.       }else if(qName.equals("nom" )){
  82.          inNom = false;
  83.       }else if(qName.equals("intersection" )){
  84.          intersections.add(laIntersection);
  85.          inIntersection = false;
  86.       }else if(qName.equals("x" )){
  87.          inX = false;
  88.       }else if(qName.equals("y" )){
  89.          inY = false;
  90.       }else{
  91.          //erreur, on peut lever une exception
  92.          throw new SAXException("Balise "+qName+" inconnue." );
  93.       }     
  94.    }
  95.    //détection de caractères
  96.    public void characters(char[] ch,
  97.                        int start,
  98.                        int length)
  99.                 throws SAXException{
  100.       String lecture = new String(ch,start,length);
  101.       if(inNom){
  102.          laRoute.setNom(lecture);
  103.       }else if(inX){
  104.          laIntersection.setX(Integer.parseInt(lecture));
  105.       }else if(inY){
  106.          laIntersection.setY(Integer.parseInt(lecture));
  107.       }
  108.    }
  109.    //début du parsing
  110.    public void startDocument() throws SAXException {
  111.       System.out.println("Début du parsing" );
  112.    }
  113.    //fin du parsing
  114.    public void endDocument() throws SAXException {
  115.       System.out.println("Fin du parsing" );
  116.       System.out.println("Resultats du parsing" );
  117.       for(route p : routes){
  118.          System.out.println(p);
  119.       }
  120.           for(intersection p : intersections){
  121.              System.out.println(p);
  122.           }
  123.    }
  124.    // test
  125.    public static void main(String[] args){
  126.       try{
  127.          // création d'une fabrique de parseurs SAX
  128.          SAXParserFactory fabrique = SAXParserFactory.newInstance();
  129.          // création d'un parseur SAX
  130.          SAXParser parseur = fabrique.newSAXParser();
  131.          // lecture d'un fichier XML avec un DefaultHandler
  132.          File fichier = new File("./src/tacheparseur/carte.xml" );
  133.          DefaultHandler gestionnaire = new CarteHandler();
  134.          parseur.parse(fichier, gestionnaire);
  135.       }catch(ParserConfigurationException pce){
  136.          System.out.println("Erreur de configuration du parseur" );
  137.          System.out.println("Lors de l'appel à SAXParser.newSAXParser()" );
  138.       }catch(SAXException se){
  139.          System.out.println("Erreur de parsing" );
  140.          System.out.println("Lors de l'appel à parse()" );
  141.          se.printStackTrace();
  142.       }catch(IOException ioe){
  143.          System.out.println("Erreur d'entrée/sortie" );
  144.          System.out.println("Lors de l'appel à parse()" );
  145.       }
  146.    }
  147. }


   
voila le resultat:

Code :
  1. init:
  2. deps-jar:
  3. compile-single:
  4. run-single:
  5. Début du parsing
  6.   carte
  7.   route
  8.   nom
  9.   intersection
  10.   x
  11.   y
  12.   intersection
  13.   x
  14.   y
  15. Fin du parsing
  16. Resultats du parsing
  17. nom:N195
  18. x : 33, y : 69
  19. x : 25, y : 17
  20. BUILD SUCCESSFUL (total time: 1 second)

n°975193
teut
Posté le 08-02-2005 à 11:14:42  profilanswer
 

royou1 a écrit :

je suis désolé mais je comprend pas tout ce que tu m'a expliqué teut


Bon je suis pas tres clair c'est vrai... en fait qu'est ce que tu comprends pas dans mes explications ? (histoire que je reformule tout ca un peu mieux)
 
Sinon c'est bien ca marche, mais j'ai qq petites remarques :  
- Est ce que les id sont importants ? car si oui ils sont mal 'setter' -> si tu affiche l'id de ta route par exemple, tu vas te retrouver avec l'id de ta seconde intersection, car des que tu rencontre une intersection tu 'set' l'id de cette intersection sur la route. Je pense que dans ton try catch, il faudrait que tu fasses un 'set' de l'id sur l'intersection et non sur la route. Pour l'id de la route tu ne le recupere visiblement jamais.
- Tu disais dans ton premier post, que tu parsais le xml afin de remplir un objet qui serait transmis a une autre personne. Or ta trace est correct, mais ton objet carte est toujours vide. Il faudrait par ex, a la fin de la methode enddocument faire un carte.setRoute(route) et carte.setIntersection(intersection), de plus il faudrait initialiser la carte dans la methode startDocument, et peu etre 'setter' l'id de la carte au moment ou tu analyse la balise ouvrante 'carte'.
En espérant avoir été plus clair.


Message édité par teut le 08-02-2005 à 11:16:17
n°1034361
royou1
bordeaux dans le coeur
Posté le 04-04-2005 à 15:04:24  profilanswer
 

bon ben jai fais les modifs en prenant en compte ce que tu m'as dit et ça marche plus donc pour pas retarder les autres membres de mon equipe j'ai repris mon projet qui marche.
maintenant on me demande de créer une classe qui va dessiner ce que j'ai récuperer avec mon parseur en vue d'une intégration avec les autres concepteurs qui m'accompagne.
 

Code :
  1. package tacheparseur;
  2. import java.awt.*;
  3. import java.util.*;
  4. /**
  5. *
  6. * @author  royal
  7. */
  8. public class TrafficSimulator {
  9.    
  10.     /** Creates a new instance of TrafficSimulator */
  11.     public TrafficSimulator() {
  12.     }
  13.    
  14.     public void dessiner(){
  15.         System.out.println("la carte est dessinée" );
  16.     }
  17.    
  18.     public boolean new route(Point posIntersectionDebut , Point posIntersectionFin , int vitesseMax){
  19.         Point posIntersectionDebut = new Point(x,y);
  20.         Point posIntersectionFin   = new Point(x,y);
  21.     }
  22.    
  23.     public boolean new intersection(Point position){
  24.         System.out.println("création d'une intersection" );
  25.         System.out.println("x" = +position.x);
  26.         System.out.println("y" = +position.y);
  27.     }
  28.    
  29.     public boolean new vehicule(Point positionClic, int typeVehiculeSelect){
  30.        
  31.     }
  32.    
  33. }


je n'arrive pas a utiliser correctement le type point sa vient surement de mes import mais je bloque.

n°1037592
royou1
bordeaux dans le coeur
Posté le 06-04-2005 à 15:44:54  profilanswer
 

bon j'ai réussi des amélioration et je vais proceder a des test en vue d'une intégration dans le projet des que sa fonctionne je vous transmet tout ça peut servir pour d'autre .


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  parser un fichier xml en java

 

Sujets relatifs
[Excel - VBA] Ouverture Fichier en VBAinclure un fichier txt a une page web en html
Chat en java -> probleme de compatibilitéjava JADE (multi agent), question sur les behaviours en parrallèle
Parser BBCode[Java] parser fichier CSV... JDBC ?
[Java-XML] Arret de lecture d'un fichier XML avec un parser SAX[java] parser XML : fichier XML dans un jar ou non....
[ java / regexp ] parser un fichier texte.parser un fichier xml en java
Plus de sujets relatifs à : parser un fichier xml en java


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR