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 :

[Xerces] Charactères (...) ignorés


Sujet :

XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Par défaut [Xerces] Charactères (...) ignorés
    Salutation,


    j'ai un soucis avec Xerces.
    Je l'utilise pour valider et parser un fichier xml.

    La validation du schéma est ok.
    Le seul problème est au niveau du parseur.

    J'utilise SAX2, en héritant la classe DefaultHandler.
    Les fonctions comme startElement etc fonctionnent, à l'exception de characters.


    En mettant un cprintf dans cette fonction, j'ai constaté qu'elle n'était jamais appelée.

    Le fichier XML est classique et contient du texte dans certaines balises.

    Doit on activer une "feature" particulière pour cette fonctionnalité ?


    Merci,
    Cordialement.

  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,

    Ce n'est pas très clair, peux-tu donner un exemple minimal et complet qui montre ton problème ?

    MAT.

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Par défaut
    Alors voici un bout de code, j'ai juste enlevé le superflu :

    La classe principale :

    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
     
        try {
            XMLPlatformUtils::Initialize();
        }
        catch (const XMLException& toCatch) {
            return false;
        }
     
        SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
     
        parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);
        parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
        parser->setFeature(XMLUni::fgXercesDynamic, false);
        parser->setFeature(XMLUni::fgXercesSchema, true);
        parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
     
        MySAX2Handler handler;
        ValidationHandler errorHandler;
     
        handler.setEntity(mEntity);
     
        parser->setContentHandler(&handler);
        parser->setErrorHandler(&errorHandler);
        parser->setEntityResolver(&handler);
        parser->parse(fileName);
     
        delete parser;
     
        XMLPlatformUtils::Terminate();

    Le header du handler MySAX2Handler :

    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 MySAX2Handler : public DefaultHandler {
    public:
        MySAX2Handler();
        void startDocument();
        void startElement(
            const   XMLCh* const    uri,
            const   XMLCh* const    localname,
            const   XMLCh* const    qname,
            const   Attributes&     attrs
        );
        void endElement(
            const   XMLCh* const    uri,
            const   XMLCh* const    localname,
            const   XMLCh* const    qname
        );
        void characters(
            const XMLCh* const chars,
            const unsigned int length
        );
        void fatalError(const SAXParseException&);
        void endDocument();
    };
    Et l'impémentation de la function characters :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MySAX2Handler::characters(const XMLCh *const chars, const unsigned int length)
    {
        cprintf("Inside the character function\n");
    };


    Peu importe le fichier xml, la fonction characters n'est jamais appelée.

  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
    A quoi ressemble le document XML que tu lis ?

    MAT.

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Par défaut
    N'étant pas sur mon ordinateur personnel, je ne peux ressortir les fichiers exactes.

    Ce que je peux dire, c'est que j'ai testé des fichiers validés par schéma et d'autres par DTD (en changeant les features du parser pour prendre en compte ces derniers).

    Tous avaient divers balises avec attributs et texte.

    Les autres fonctions comme startElement etc fonctionnent très bien.
    Seule la fonction characters n'est pas appelée...

  6. #6
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Par défaut
    J'ai trouvé le problème :

    Le header de la fonction characters était incorrecte, j'ai mis const unsigned int au lieu de XMLSize_t.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // Pas bien
    void characters(
        const XMLCh* const chars,
        const unsigned int length
    );
     
    // bien
    void characters(
        const XMLCh* const chars,
        const XMLSize_t length
    );

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

Discussions similaires

  1. [DOM] [Xerces] Insertion d'une entité
    Par Traroth dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 19/05/2008, 09h28
  2. [Xerces][XSD] Ignorer les noeuds <annotation/> lors d'un preparseGrammar()
    Par yienyien dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/03/2007, 09h47
  3. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 14h50
  4. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18
  5. Réponses: 2
    Dernier message: 16/05/2003, 10h14

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