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 Discussion :

[SAX] Mauvaise syntaxe XML, declenchement des exceptions


Sujet :

XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut [SAX] Mauvaise syntaxe XML, declenchement des exceptions
    Bonjour a tous,

    J'ai d'abord cherché dans cette rubrique et je n'ai pas trouvé la réponse.
    Je parse (avec succès) un fichier XML et range le contenu dans une base de données. Je veux maintenant essayer mon programme dans le cas ou mon fichier XML n'est pas correct.

    Quelque part dans le XML j'ajoute volontairement l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...CPH</destination>
    <trip_distance>884</trip_distance
    <fleet>141,319,320,32...
    (balise "</trip_distance" pas fermée)

    seulement mon parsing (SAX) s'arrête alors et je ne passe par aucun point de débogage de mon programme.
    J'ai surchargé mes fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void fatalError(const SAXParseException&);
    void error(const SAXParseException&);
    void warning(const SAXParseException&);
    mais rien a faire, il ne se passe rien.

    Je voulais donc savoir si il y avait un mécanisme particulier oublié (fonction virtuelle spéciales a surcharger, sachant que j'ai fait le tour de la classe HandlerBase) ou alors si la solution unique était de passer par un fichier DTD ou autre pour faire valider la structure du XML ?

    Merci d'avance a toute tentative de réponse

    Colin

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Quelle bibliothèque utilises-tu ?

    MAT.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Salut,

    C'est Xerces (2-7-0-1 selon le path de mes dépendances), je n'ai pas d'autre choix (Pack de développement)

    Merci

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Il n'y a pas spécialement d'astuce à partir du moment où tu positionnes le error handler correctement.
    Une balise non fermée est a priori une erreur fatale et devrait se solder par une SAXParseException.

    Peut-être qu'un peu de code pourrait aider à voir le problème ?

    MAT.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Salut MAT,

    Voila ma classe Handler :
    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
     
    class myParseHandler : public HandlerBase
    {
    public :
    	myParseHandler();
     
    	void startDocument();
    	void endDocument();
    	void startElement(const XMLCh* const, AttributeList&);
    	void endElement(const XMLCh* const);
    	void characters(const XMLCh* const, const AMD_UInt32);
     
    	void fatalError(const SAXParseException&);
    	void error(const SAXParseException&);
    	void warning(const SAXParseException&);
     
     
    private:
    	DbInsert _insertorObject;
    	std::string _nodeName;
    	CalcData _currentData;
    	Char* _originTmp;
    };

    Il n'y a pas spécialement d'astuce à partir du moment où tu positionnes le error handler correctement.
    Ce sont les seules fonctions erreur que j'ai implémenté. Il y a peut être quelque chose a faire a un autre niveau ?

    En ce qui concerne le corps de characters, endElement etc... cela devrait etre bon car tout fonctionne comme prévu en cas de syntaxe xml correct.

    Colin

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Re,

    Je pense avoir oublié de catcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    catch (const XMLException& toCatch) {
       char* message = XMLString::transcode(toCatch.getMessage());
       TRC_INFO(APP,"Exception message is: "<< message );
       XMLString::release(&message);
       return -1;
    }
    au niveau de lancer le parsing

    A confirmer...

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Citation Envoyé par colin.sauvanet Voir le message
    Ce sont les seules fonctions erreur que j'ai implémenté. Il y a peut être quelque chose a faire a un autre niveau ?
    En fait tu n'as même pas besoin de réimplémenter ces méthodes, leurs implémentations par défaut devraient suffire.
    Comment tu positionnes le handler ?

    MAT.

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

Discussions similaires

  1. Gestion des exceptions d'une extraction xml
    Par greatmaster1971 dans le forum kettle/PDI
    Réponses: 2
    Dernier message: 08/09/2008, 13h14
  2. Réponses: 0
    Dernier message: 31/01/2008, 11h43
  3. [débutant] gestion des exceptions dans web.xml
    Par jgaslain dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 06/02/2007, 09h46
  4. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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