| 12
 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()");
      }
   }	
} | 
Partager