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 :

Parsage xml sax [SAX]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut Parsage xml sax
    Bonjour,

    Je voudrais parser un fichier xml avec sax mais je rencontre quelque difficultés.

    Tout d'abord voici le fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="utf-8"?>
    				<Specialites><specialite>
    					<Id>34</Id>
    					<Nom>Allergologie et immunologie</Nom>
    				  </specialite><specialite>
    					<Id>35</Id>
    					<Nom>Anatomie pathologique</Nom>
    				  </specialite></Specialites>
    Voila comment j'ai procédé
    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
     
    public static void main(String[] args) throws ParserConfigurationException, SAXException {
    		// TODO Auto-generated method stub
     
    		SAXParserFactory fabrique = SAXParserFactory.newInstance();
    		SAXParser parseur = null;
    		  parseur = fabrique.newSAXParser();
     
    		//Récuperation xml (string)
    		recupInfoBd recup = new recupInfoBd();
    		String xml = recup.getFichier();
     
     
    		System.out.println("xmllllllllllll"+xml);
     
     
    		//convertion string en inputstream
    	InputStream stream = new ByteArrayInputStream(xml.getBytes());
     
    		DefaultHandler gestionnaire = new parser();
     
    		try {
    			parseur.parse(stream, gestionnaire);
    		} catch (SAXException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    	}
    Et enfin ma classe parser utilisé ci-dessus qui extends de DefaultHandler
    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
     
    public class parser extends DefaultHandler  {
     
    	private Locator locator;
    	static String lastElement;
     
    	public parser(){
    		super();
    		// On definit le locator par defaut.
    		locator = new LocatorImpl();
    	}
     
    	@Override
    	public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void endDocument() throws SAXException {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void endElement(String arg0, String arg1, String arg2)
    			throws SAXException {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void endPrefixMapping(String arg0) throws SAXException {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void ignorableWhitespace(char[] arg0, int arg1, int arg2)
    			throws SAXException {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void processingInstruction(String arg0, String arg1)
    			throws SAXException {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void setDocumentLocator(Locator value) {
    		// TODO Auto-generated method stub
    		locator =  value;
     
    	}
     
    	@Override
    	public void skippedEntity(String arg0) throws SAXException {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void startDocument() throws SAXException {
    		// TODO Auto-generated method stub
    		System.out.println("startxml");
     
    	}
     
    	@Override
    	public void startElement(String arg0, String localName, String arg2,
    			Attributes arg3) throws SAXException {
    		// TODO Auto-generated method stub
    		lastElement=localName;
    		System.out.println(lastElement);
    	}
     
    	@Override
    	public void startPrefixMapping(String arg0, String arg1)
    			throws SAXException {
    		// TODO Auto-generated method stub
     
    	}
     
     
     
     
    }
    Comment je peux récupérer ce qu'il y a entre les balises ??


    Je ne pense pas être très loin du but...

    Merci de votre aide

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    C'est plutôt une erreur d'encodage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream stream = new ByteArrayInputStream(xml.getBytes());
    Il faut spécifier l'encodage utilisé par le fichier, sinon celui par défaut est utilisé et visiblement, ça passe pas.

    Donc
    Essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream stream = new ByteArrayInputStream(xml.getBytes("UTF-8"));
    mais en vrai il faudrait détecter ce dernier.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    Oui merci il n'y a plus d'erreur d'encodage.

    mais ma console affiche que startxml de la methode startDocument().

    La méthode characters() ne doit elle pas être implémenté ??

    Merci

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Oui, c'est bien ça.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    La méthode startElement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public void startElement(String arg0, String localName, String arg2,
    			Attributes arg3) throws SAXException {
    		// TODO Auto-generated method stub
    		lastElement=localName;
    		System.out.println("lastElement :"+lastElement);
    	}
    La méthode characters()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	public void characters(char[] ch, int start, int end) throws SAXException {
    		// TODO Auto-generated method stub
    		 String Id=null;
     
    		if(lastElement.compareTo("Id")==0)  Id =new String(ch, start, end);
    		System.out.println(Id);
     
    	}
    lastElement est toujours vide, donc ca ne marche pas.

    As tu une idée ?

    Merci de ton aide

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Ca fait longtemps que je n'ai pas fait de SAX, et j'ai pas trop envie de m'y remettre.
    Mais sache que tu n'es garanti d'avoir lu tous les charactères contenu dans la balise "Id" que lorsque tu rencontre le endElement pour "Id". Il faut donc les mettre dans un buffer en attendant.
    Ensuite "lastElement" ne devrait pas être "static" dans ce contexte, malgré tout, il ne devrait pas être vide, et je vois pas trop pourquoi
    Bon courage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SAX] parsage xml sax probleme valeur null
    Par toma03 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 24/02/2012, 12h33
  2. XML SAX et eVC++ sur PocketPC
    Par gbardy dans le forum MFC
    Réponses: 2
    Dernier message: 06/07/2006, 17h36
  3. [netbeans 5.0] Probleme : org.xml.sax.SAXParseException
    Par romarseille dans le forum NetBeans
    Réponses: 4
    Dernier message: 12/06/2006, 11h35
  4. [DOM] Parsage XML en PHP 4
    Par Huntress dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 07/12/2005, 22h24
  5. [Débutant] Lecture xml SAX
    Par Ekros dans le forum APIs
    Réponses: 6
    Dernier message: 21/06/2004, 15h14

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