Parcours d'un doc XML en JAVA à l'aide de SAX

smahaneAAI Messages postés 68 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 7 février 2014 - 30 mars 2012 à 04:19
smahaneAAI Messages postés 68 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 7 février 2014 - 30 mars 2012 à 15:29
Salut tout l monde j’essaie de parcourir un doc XML par l'API Sax avec du code java , j'ai fais pas mal de recherches et j'ai essayé quelques codes mais le plus que j'ai préféré et celui-ci mais ça ne marchera pas comme si le parser ne parcours pas mon doc xml et je ne sais pas où est le probleme !!!
pouvez vous me guider

voilà j utilisé 2 Class une où j'ai déclaré Class Personne en tant qu'objet et l'autre PersonneHandler qui hérite de DefaultHandler et dont y'en a le main, vous trouverez aussi le contenu de mon doc xml nommé "Exemple.xml" :

Classe Personne :

package expSax;
/**
*
* @author Smahane
*/

public class Personne{
private int id;
private String nom, prenom, adresse;

public Personne(){}

public int getId(){return id;}
public String getNom(){return nom;}
public String getPrenom(){return prenom;}
public String getAdresse(){return adresse;}

public void setId(int id){this.id = id;}
public void setNom(String nom){this.nom = nom;}
public void setPrenom(String prenom){this.prenom = prenom;}
public void setAdresse(String adresse){this.adresse = adresse;}

public String toString(){
return new StringBuffer("Nom : ").append(nom).append(", ")
.append("Prenom : ").append(prenom).append(", ")
.append("Adresse : ").append(adresse)
.toString();
}
}


et la classe PersonneHandler:

package expSax;

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");
for(Personne p : annuaire){
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("./Exemple.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()");
}
}
}

et mon doc xml "Exemple.xml" :
<?xml version="1.0" encoding="ISO-8859-1"?>


<nom>nom0</nom>
prenom0


adresse0



<nom>nom1</nom>
prenom1


adresse1







je ne sais pas où est le problème peut être qu'un package qui manque

1 réponse

smahaneAAI Messages postés 68 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 7 février 2014 10
30 mars 2012 à 15:29
Salut encore,
ce code est correcte le probleme et juste dans le chemin de mon doc xml
0
Rejoignez-nous