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 :

SAXParser et DTD [SAX]


Sujet :

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

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut SAXParser et DTD
    Bonjour à tous,
    J'essaye de parser un flux XML avec SAX. J'utilise le code source publié sur ce site : "Exemple de gestion d'erreur lors d'un parsing avec SAX"

    Le main() de ma classe PersonneHandler :
    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
     
     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()"+pce);
          }catch(SAXException se){
             System.out.println("Erreur de parsing");
             System.out.println("Lors de l'appel à parse()"+se);
             se.printStackTrace();
          }catch(IOException ioe){
             System.out.println("Erreur d'entrée/sortie");
             System.out.println("Lors de l'appel à parse()"+ioe);
          }
       }
    Mon flux XML :
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE annuaire SYSTEM "Annuaire.dtd" >
    <annuaire>
    	<personne id="0">
    		<nom>nom0</nom>
    		<prenom>prenom0</prenom>
    		<adresse>adresse0</adresse>
    	</personne>
    	<personne id="1">
    		<nom>nom1</nom>
    		<prenom>prenom1</prenom>
    		<adresse>adresse1</adresse>
    	</personne>
    </annuaire>
    Le DTD associé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <!ELEMENT annuaire (personne*)>
     
    <!ELEMENT personne (nom,prenom,adresse)>
    <!ATTLIST personne id CDATA #REQUIRED>
     
    <!ELEMENT nom (#PCDATA) >
     
    <!ELEMENT prenom (#PCDATA) >
     
    <!ELEMENT adresse (#PCDATA)>
    1. Si j'enlève la déclaration DOCTYPE du flux XML, le parsing se passe sans pb.

    2. Avec le DOCTYPE le SAXParser lève l'exception suivante :
    "Open Quote is expected for attribute "id" associated with an element type "personne""

    Je ne comprend pas cette erreur de SAXParser, mon flux a l'air bien formé et valide, non ?
    merci pour votre aide

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Tu utilises quel parser ?

    Je viens de faire le test avec le parser d'un JDK 1.4.2_07 et ca marche sans probleme.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    Citation Envoyé par bulbo
    Tu utilises quel parser ?
    Bonne question !
    J'ai mis le niveau compliance sur 5.0. Sous Eclipse :
    JRE System Library :
    /usr/java/jdk1.5.0_05/jre/lib donc je pense que c'est ce parser que j'utilise.
    Je fais un :
    import javax.xml.parsers.*;

  4. #4
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    J'ai pas de 1.5 sous la main je ne peux donc pas faire le test malheureusement.

    Essaye avec un handler qui ne fait rien histoire d'eliminer un probleme dans ton code. Si ca plante toujours essaye de mettre a jour ton JDK.

    Si ca ne suffit pas, telecharge un parser (Xerces2 au hasard), met le dans le CLASSPATH avant le rt.jar du JDK et reteste.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    Citation Envoyé par bulbo
    J'ai pas de 1.5 sous la main je ne peux donc pas faire le test malheureusement.

    Essaye avec un handler qui ne fait rien histoire d'eliminer un probleme dans ton code.
    Toujours même erreur...

    Citation Envoyé par bulbo
    Si ca plante toujours essaye de mettre a jour ton JDK.
    Sur le site de Sun, j'ai l'impression que j'ai le dernier JDK

    Citation Envoyé par bulbo
    Si ca ne suffit pas, telecharge un parser (Xerces2 au hasard), met le dans le CLASSPATH avant le rt.jar du JDK et reteste.
    Heu... là j'suis pas assez doué
    Il va falloir que j'aborde java, avec des choses plus simple...
    en tout cas merci pour l'aide

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    Ok j'ai refait un test en baissant le niveau de Jva 5.0 à 1.4.
    JRE System Library : java-1.4.2-gcj-4.0-1.4.2.0

    Si je retire <!ATTLIST..... > de la DTD, le parsing marche bien.

    J'ai fait une sortie de la trace d'erreurs :

    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
     
    Debut du parsing
    Erreur de parsing
    Lors de l'appel a parse() org.xml.sax.SAXParseException@18f550
    org.xml.sax.SAXParseException@18f550
       at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(org.apache.xerces.xni.parser.XMLParseException) (Unknown Source)
       at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(java.lang.String, java.lang.String, org.apache.xerces.xni.parser.XMLParseException) (Unknown Source)
       at org.apache.xerces.impl.XMLErrorReporter.reportError(org.apache.xerces.xni.XMLLocator, java.lang.String, java.lang.String, java.lang.Object[], short) (Unknown Source)
       at org.apache.xerces.impl.XMLErrorReporter.reportError(java.lang.String, java.lang.String, java.lang.Object[], short) (Unknown Source)
       at org.apache.xerces.impl.XMLScanner.reportFatalError(java.lang.String, java.lang.Object[]) (Unknown Source)
       at org.apache.xerces.impl.XMLScanner.scanAttributeValue(org.apache.xerces.xni.XMLString, org.apache.xerces.xni.XMLString, java.lang.String, boolean, java.lang.String) (Unknown Source)
       at org.apache.xerces.impl.XMLDTDScannerImpl.scanAttDefaultDecl(java.lang.String, java.lang.String, java.lang.String, org.apache.xerces.xni.XMLString, org.apache.xerces.xni.XMLString) (Unknown Source)
       at org.apache.xerces.impl.XMLDTDScannerImpl.scanAttlistDecl() (Unknown Source)
       at org.apache.xerces.impl.XMLDTDScannerImpl.scanDecls(boolean) (Unknown Source)
       at org.apache.xerces.impl.XMLDTDScannerImpl.scanDTDExternalSubset(boolean) (Unknown Source)
       at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(boolean) (Unknown Source)
       at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(boolean) (Unknown Source)
       at org.apache.xerces.parsers.XML11Configuration.parse(boolean) (Unknown Source)
       at org.apache.xerces.parsers.XML11Configuration.parse(org.apache.xerces.xni.parser.XMLInputSource) (Unknown Source)
       at org.apache.xerces.parsers.XMLParser.parse(org.apache.xerces.xni.parser.XMLInputSource) (Unknown Source)
       at org.apache.xerces.parsers.AbstractSAXParser.parse(org.xml.sax.InputSource) (Unknown Source)
       at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(org.xml.sax.InputSource) (Unknown Source)
       at javax.xml.parsers.SAXParser.parse(org.xml.sax.InputSource, org.xml.sax.helpers.DefaultHandler) (/usr/lib/libgcj.so.6.0.0)
       at javax.xml.parsers.SAXParser.parse(java.io.File, org.xml.sax.helpers.DefaultHandler) (/usr/lib/libgcj.so.6.0.0)
       at sample.xml.sax.parser.PersonneHandler.main(java.lang.String[]) (Unknown Source)
       at gnu.java.lang.MainThread.call_main() (/usr/lib/libgcj.so.6.0.0)
       at gnu.java.lang.MainThread.run() (/usr/lib/libgcj.so.6.0.0)

    C'est cool Java, mais pour mes débuts je galère vraiment

  7. #7
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Tu utilises Gcj.. ce serait peut-etre bien d'essayer d'abord avec la distrib officielle.

    Autre chose essaye de compiler en mode debug (option -g de javac) comme ca tu verras les lignes ou se produisent les erreurs dans ton code.

    J'ai teste ton code et ca fonctionne sans probleme chez moi donc je pense que ca vient plutot de ta version de Java.

    Ma config: XP, jdk1.4.2

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    Ok merci,
    J'ai fait une install automatique de Java sous une distrib Linux ( Ubuntu ), sans vraiment chercher à comprendre.
    Je vais reprendre ça à la mano

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    Test avec j2sdk1.4.2_10 que je viens de télécharger sur le site de sun.
    Toujours pareil... grrrr

    La ligne 158 de PersonneHandler correspond à l'appel du parse :
    parseur.parse(fichier, gestionnaire);

    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
     
    ebut du parsing
    Erreur de parsing
    Lors de l'appel a parse()org.xml.sax.SAXParseException: Open quote is expected for attribute "id" associated with an  element type  "personne".org.xml.sax.SAXParseException: Open quote is expected for attribute "id" associated with an  element type  "personne".
    	at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    	at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    	at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
    	at org.apache.xerces.impl.XMLScanner.scanAttributeValue(Unknown Source)
    	at org.apache.xerces.impl.XMLDTDScannerImpl.scanAttDefaultDecl(Unknown Source)
    	at org.apache.xerces.impl.XMLDTDScannerImpl.scanAttlistDecl(Unknown Source)
    	at org.apache.xerces.impl.XMLDTDScannerImpl.scanDecls(Unknown Source)
    	at org.apache.xerces.impl.XMLDTDScannerImpl.scanDTDExternalSubset(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    	at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    	at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
    	at javax.xml.parsers.SAXParser.parse(SAXParser.java:281)
    	at sample.xml.sax.parser.PersonneHandler.main(PersonneHandler.java:158)

  10. #10
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Si tu realises ton test exactement avec les fichiers que tu as poste je ne sais pas quoi dire .. Si je n'ai eu aucun probleme avec tu devrais pas en avoir non plus ..

    Vraiment désolé de ne pouvoir t'aider.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    merci pour ton aide.
    J'ai essayé avec Java 1.4 ( deux versions du Jdk), 5.0
    J'avais des .jar dans mon buildpath ( xerces et autres ) je les ai supprimmé.
    Toutes les versions de tout les parseurs testés me disent tous : 'la valeur doit être entre quote"
    Si tout les parseurs me disent que mon flux XML est faux, c'est qu'il est faux !
    et pourtant elles y sont les quotes
    ja vais tester sous windows pour voir si ça marche mieux....
    en tout cas encore merci pour l'aide...

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    Ok, c'est résolu, le pb était bien au niveau du fichier XML.
    Je suis repartis d'un projet totalement vierge, j'ai recréer des fichiers XML et DTD => ça à marché.

    J'ai repris l'ancien projet => écrasé .xml et .dtd => ça à marché.

    Pas compris quel était le pb sur le premier fichier, mais bon ça c'est pas grave !

    ça m'aura au moins permit de progresse un peu sous Eclipse. Maintenant j'ai trois JRE de dispo pour mes projets

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

Discussions similaires

  1. Forcer la validation suivant DTD externe
    Par iceman dans le forum Valider
    Réponses: 9
    Dernier message: 30/12/2003, 08h54
  2. [XML][DTD] Creer un parser à partir d'une DTD
    Par schnekre dans le forum Valider
    Réponses: 4
    Dernier message: 15/12/2003, 12h59
  3. Réponses: 2
    Dernier message: 29/07/2003, 12h52
  4. Faire respecter une DTD !!!
    Par haypo dans le forum Valider
    Réponses: 3
    Dernier message: 12/07/2003, 19h20
  5. Placement des balises avec DTD
    Par Keul125 dans le forum Valider
    Réponses: 4
    Dernier message: 28/05/2003, 12h08

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