Parser un fichier XML avec SAX en java
bonjour,
je travaille sur un projet, mais je suis vraiment bloqué et je ne sais pas, par quoi commencer !le but de ce projet est de parser des fichier XMl ( et csv, mais je préfère commencer par xml) ensuite de stocker ces données dans une SGBD afin de faire par la suite des traitement statistiques.
Donc pour commencer j'ai essayé de parser du XML avec du SAX et j'ai pensé par la suite pouvoir stocker les données à l'aide du pattern DAO...
mon problème pour l'instant est le suivant j'ai créer deux classe pour parser mon fichier XML mais j'arrive toujours pas a bien comprendre comment marche SAX!!!
voici la première classe test avec mes objets :
Code:
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
| public class test {
private int id;
private String nom,prenom,adresse;
public test(){}
public int getid(){return id;
}
public void setid (int id){ this.id=id;}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String tostring() { return new StringBuffer("Nom: ").append(nom).append(",").append("prenom : ").append(prenom).append(",").append("Adresse : ").append(adresse).toString();
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getAdresse() {
return adresse;
}
public void setAdresse(String adresse) {
this.adresse = adresse;
}
} |
la deuxième classe qui permet de parser le fichier XML :
Code:
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
| import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.jar.Attributes;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class testHandler extends DefaultHandler {
public LinkedList<test> annuaire;
private test test;
private boolean inAnnuaire,intest,inNom,inPrenom,inAdresse;
private StringBuffer buffer;
public testHandler(){
super();
}
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException{
if(qName.equals("annuaire")){
annuaire = new LinkedList<test>();
inAnnuaire = true;
}else if(qName.equals("personne")){
test = new test();
try{
int id = Integer.parseInt(attributes.getValue("id"));
test.setid(id);
}catch(Exception e){
//erreur, le contenu de id n'est pas un entier
throw new SAXException(e);
}
intest = true;
}else {
buffer = new StringBuffer();
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(test);
test = null;
intest = false;
}else if(qName.equals("nom")){
test.setNom(buffer.toString());
buffer = null;
inNom = false;
}else if(qName.equals("prenom")){
test.setPrenom(buffer.toString());
buffer = null;
inPrenom = false;
}else if(qName.equals("adresse")){
test.setAdresse(buffer.toString());
buffer = null;
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(buffer != null) buffer.append(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(test p : annuaire){
System.out.println(p);
}
}
public static void main(String [ ] args) throws SAXException, IOException, ParserConfigurationException{
SAXParserFactory fabrique = SAXParserFactory.newInstance();
SAXParser parseur = fabrique.newSAXParser();
File fichier = new File("********.xml");
DefaultHandler gestionnaire = new testHandler();
parseur.parse(fichier, gestionnaire);
}
} |
merci pour votre réponse d'avance.