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

XML/XSL et SOAP Discussion :

Parser un fichier XML avec SAX en java


Sujet :

XML/XSL et SOAP

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut 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 Java : 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
    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 Java : 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
    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.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Une seule raison majeure : ce n'est pas la bonne classe, Attributes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //import java.util.jar.Attributes;
    import org.xml.sax.Attributes;
    Conséquence : la méthode startElement() n'est jamais appelée comme la signature ne coincide pas de celle d'api ContentHandler et par conséquence encore toutes les variables ne sont jamais faites faire fonctionner.

    Quant au style du codage, je ne le trouve pas très sympa de faire étaler de genre de style aux forums publiques même pour un usage absolument privé. Un nom de classe en commençant pas un caractère minuscule : okay si on veut, c'est admissible, ce n'est qu'une convention et je reste neutre à cet égard; un getter comme getid() : okay, ce n'est pas d'usage mais si on veut, c'est feasable; mais "private test test;" avec le nom du type et le nom d'une instance prenant le même nom, c'est quand même trop taxé l'oeil de lecteurs, et encore c'est acceptable pour le compilateur java mais ce est bien hostil envers tout le reste.

Discussions similaires

  1. parser un fichier xml avec xml.sax
    Par pi-2r dans le forum Général Python
    Réponses: 2
    Dernier message: 07/08/2014, 17h06
  2. [JDOM] Parser un fichier xml avec Java
    Par selyousfi dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 03/07/2009, 17h29
  3. parser un fichier xml avec xml.sax et la méthode "feed"
    Par louisonb dans le forum Général Python
    Réponses: 1
    Dernier message: 06/04/2009, 12h41
  4. [XML] Comment parser ce fichier XML avec java !
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/03/2006, 13h56
  5. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 20h32

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