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 :

Erreur pour trouver la DTD d'un fichier XML parsé!


Sujet :

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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 14
    Points
    14
    Par défaut Erreur pour trouver la DTD d'un fichier XML parsé!
    Bonjour à tous,

    J'ai un souci avec le parsing d'un document XML, parsé avec SAX:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SAXParserFactory fabrique = SAXParserFactory.newInstance();
             //System.err.println("Validation: "+fabrique.getFeature("http://xml.org/sax/features/validation"));
             // creation d'un parseur SAX
             SAXParser parseur = fabrique.newSAXParser();
             // lecture d'un fichier XML avec un DefaultHandler
             File fichier = new File(fileName);
             SPAMHandler gestionnaire = new SPAMHandler();
             parseur.parse(fichier, gestionnaire);
    La feature "validation" est à false (je l'ai affiché, comme vous le voyez).

    Les premières lignes de mon XML sont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE exemple SYSTEM "document.dtd">
    Et mon exécutable a BESOIN de trouver le fichier "document.dtd" dans le working directory, sinon il tente d'accéder à la DTD et crache une "FileNotFOundException"!

    Pouvez vous m'expliquer pourquoi SAX cherche automatiquement la DTD dans le working directory svp? Quelles seraient les options pour me sortir de là?
    Je ne peux tout de même pas mentionner un chemin d'accès complet en tête de mon fichier XML...

    Merci à vous!

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Bonjour

    Les parseurs SAX utilisent un EntityResolver pour déterminer les entités externes des documents XML et en particulier les DTD. Par defaut, ils utilisent une url pour trouver l'entité.

    Dans ton cas, pour resoudre la déclaration de la dtd qui est une entité externe, il utilise l'url "document.dtd" assimilée à un fichier local dans le répertoire courant.

    Pour changer se comportement, il faut fournir un EntityResolver à ton parseur SAX.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SAXParser parseur = fabrique.newSAXParser();
    parseur.setEntityResolver(new MyEntityResolver());
    La classe MyEntityResolver doit implémenter org.xml.sax.EntityResolver.
    C'est la méthode resolveEntity qui doit donner le chemin de la dtd.

    voir: http://www.saxproject.org/apidoc/org...yResolver.html

    Codrialement
    Willy78

Discussions similaires

  1. Erreur pour trouver les librairies
    Par Milamber77 dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 28/11/2009, 18h34
  2. [XL-2003] bouton pour trouver l'emplacement d'un fichier
    Par NovVba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/06/2009, 12h39
  3. Declaration plusieurs DTD dans un fichier XML
    Par sebastien2222 dans le forum Valider
    Réponses: 4
    Dernier message: 02/03/2006, 14h34
  4. [DOM] Erreur lors du parsing d'un fichier XML par l'API DOM
    Par patricetoan dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 26/09/2005, 12h43
  5. [DOM] Erreur pour valider une DTD
    Par lenghh dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 19/05/2004, 18h15

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