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

Bibliothèques C++ Discussion :

machine à états avec un parser SAX Xerces


Sujet :

Bibliothèques C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 40
    Points : 33
    Points
    33
    Par défaut machine à états avec un parser SAX Xerces
    Salut,
    Bon voila je parse en SAX avec xerces et pour pouvoir traiter les données reçu je veux faire une machine à état. En gros mon handler xerces ressemble à ceci:

    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
     
    void startElement(const XMLCh* const name,AttributeList& attributes)
       {
    	    char* message = XMLString::transcode(name);
    	    switch(state)
    	    {
    	    case MESSAGE:
    	    	if(strcmp(message,"message")==0)
    	    		state = FRAME;
    	    	break;
    	    case FRAME:
    	    	Frame = message;
    	    	state = DATA;
    	    	break;
    	    case DATA:
    	    	Data = message;
    	    	state = SAMPLE;
    	    	break;
    	    }
    	    XMLString::release(&message);
       }
     
       void characters(const XMLCh *const chars,const XMLSize_t length)
       {
    	    char* message = XMLString::transcode(chars);
    	    switch(state)
    	    {
    	    case SAMPLE:
    	    	/*
    	    	...
    	    	*/
    	    	state = DATA;
    	    	break;
    	    }
    	    XMLString::release(&message);
       }
     
       void endElement(const XMLCh* name)
       {
    	    char* message = XMLString::transcode(name);
    	    switch(state)
    	    {
    	    case FRAME:
    	    	if(strcmp(message,"message")==0)
    	    		state = MESSAGE;
    	    	break;
    	    case DATA:
    	    	if(strcmp(message,Frame)==0)
    	    		state = FRAME;
    	    	break;
    	    }
    	    XMLString::release(&message);
       }
    Le problème ce sont les variables "Frame" et "Data" . Lorsque j'essaye de récupérer leur valeur, parfois j'ai ce que j'ai mis dedans et souvent j'obtiens des trucs du style: )>, ÏÊ ...

    Si quelqu'un avait un début de réponse ça m'aiderai pas mal

  2. #2
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Normal, tu affectes à frame une variable locale (message). Du coup, dès que tu repasses dans le code, la variable pointe sur n'importe quoi.

    Je n'ai jamais bossé avec xerces, mais de ce que j'en avais entendu, c'est une grosse bouse au niveau de la gestion des chaînes et des encodages.

    Sinon, pour corriger ton problème, passe par des std::string (la façon C++ de faire) plutôt que des char *. Tu verras la vie beaucoup plus simplement .

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    En effet la vie à l'air plus simple avec des std::string
    merci et tout cas

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

Discussions similaires

  1. Changement d'états avec case - State machine VHDL
    Par Azerty32 dans le forum VHDL
    Réponses: 2
    Dernier message: 25/05/2012, 14h22
  2. [XML] Problème avec le parser SAX
    Par carmensam dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 28/08/2009, 16h50
  3. Machine à état avec condition
    Par ABN84 dans le forum LabVIEW
    Réponses: 3
    Dernier message: 03/03/2009, 18h39
  4. état avec delphi
    Par mondanikoffi dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/11/2004, 09h46
  5. [SAX] Parser SAX : connaitre l'état d'avancement
    Par GLA31 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 26/10/2004, 09h08

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