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 :

Problème lecture fichier xml


Sujet :

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

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 266
    Points : 113
    Points
    113
    Par défaut Problème lecture fichier xml
    Bonjour,
    j'ai un petit souci avec la bibliothèque SAX que je ne maitrise pas encore parfaitement .
    J'aimerai savoir comment on peut éviter que la fonction charatere ne considère les espace vide comme des élements de texte dans ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void characters(char[] ch,int start,int length)throws SAXException { 
      String txt = new String(ch,start,length); 
      if(txt != "") { 
        System.out.println("TEXTE : "+ txt); 
      } 
    }
    et j'aimerai savoir s'il est possible de sortir tout le contenu texte (uniquement) compris entre deux balises en precisant le numéro de l'attibut.

    MErci d'avance

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Avant tout, faire un tour sur la FAQ Java :
    http://java.developpez.com/faq/java/?page=sax
    un très bon petit exemple d’utilisation de SAX

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 266
    Points : 113
    Points
    113
    Par défaut
    merci
    le probleme dans cette source c'est que le compilateur Eclipse ne prend pas en compte les listes.
    Faut-il des bibliothèques spéciales??

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Non, le problème qu'il y a (je pense) c'est ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private List<Personne> annuaire;
    Dans l'exemple ils utilisent des generics pour éviter de caster....
    Le "probleme" c'est que cela n'est disponible qu'à partir de la version 5 de Java.

    Mais pour rendre compatible cet exemple avec les versions antérieures du JDK, on peut ecrire :

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

Discussions similaires

  1. Problème de lecture fichier xml
    Par chalu133 dans le forum Langage
    Réponses: 0
    Dernier message: 19/09/2014, 10h23
  2. Problème lecture fichier XML
    Par Mercusyo dans le forum C++Builder
    Réponses: 1
    Dernier message: 17/04/2013, 11h19
  3. Problème lecture fichier XML
    Par asnaeb dans le forum C#
    Réponses: 3
    Dernier message: 04/04/2011, 09h10
  4. [SimpleXML] Problème lecture fichier XML en dynamique
    Par moulay73 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 12/11/2010, 21h43
  5. [C#-XML] - Problème de lecture fichier XML
    Par Gloups dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/08/2006, 00h40

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