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

C++ Discussion :

XML parsing avec Expat


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 64
    Points : 43
    Points
    43
    Par défaut XML parsing avec Expat
    Bonjour,

    Je dois créer un petit parser XML pour un projet multi-plateforme programmé en CPP. J'utilise Expat pour créer mon parser. Cependant cela ne semble pas fonctionner correctement .... En effet le programme compile et s'execute sans segfault mais rien ne s'affiche ...

    voici mon code :

    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
     
    #include <expat.h>
    #include <fstream>
    #include <iostream>
    #include <iomanip>
     
    using namespace std;
     
    void startElement(void *userData, const char *name, const char **atts) {
    	int i;
     
    	cerr << name << endl;
     
    	for (i=0; atts[i] ; i+=2)
    		cerr << atts[i] <<endl;
    }
     
    void endElement(void *userData, const char *name) {
     
    	cerr << name;
    }
     
    int main(void) {
     
    	filebuf *fbuf;
    	long size;
    	char *buffer;
     
    	ifstream file_in("test.xml", ios::in);
     
    	XML_Parser parser = XML_ParserCreate(NULL);
    	XML_SetUserData(parser, NULL); 
    	XML_SetElementHandler(parser, startElement, endElement);
     
    	fbuf = file_in.rdbuf();
     
    	size = fbuf->pubseekoff (0,ios::end,ios::in);
    	fbuf->pubseekpos (0,ios::in);
     
    	buffer = new char[size];
    	fbuf->sgetn (buffer, size);
     
    	XML_Parse(parser, buffer, size, NULL);
     
    	file_in.close();
     
    	XML_ParserFree(parser);
     
    	free(buffer);
    }
    Savez-vous pourquoi rien ne s'affiche ?

    merci,
    -------------------

    @(zmodai)+

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Remplacer cerr par cout ?

    Et avant qu'on te gronde, remplace vite free(buffer) par delete [] buffer.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    Cela ne change rien ici.
    -------------------

    @(zmodai)+

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Rajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // write content to stdout
      cout.write (buffer,size);
    après la lecture du buffer (comme dans C++Reference à l'origine de l'erreur free/delete[] )pour voir ce que tu lis dans ton fichier. Ca permettra déjà de savoir si l'erreur vient du parser XML ou de la lecture du fichier.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    Le fichier XML s'affiche bien en entier dans la console. C'est le parser qui ne fonctionne pas correctement semble-t-il.
    -------------------

    @(zmodai)+

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Et si tu fais juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void startElement(void *userData, const char *name, const char **atts) {
       std::cout<<"ok\n";
    }
    Tu y passes au - une fois ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    Non pas une seule fois ....
    c'est bizare
    -------------------

    @(zmodai)+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    La fonction XML_Parse renvoie 0, cela signifie qu'il y a une erreure dans le parsage. Cependant je ne vois pas d'où peut venir l'erreure.
    -------------------

    @(zmodai)+

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Le fichier est bien formé (conforme XML) ? Pas de problème d'encoding ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    Hmm j'ai très honte...
    J'ai oublié le "?" final de
    <?xml version="1.0" ?>
    du coup çe ne marchait pas ....

    Merci beaucoup pour ton aide !
    -------------------

    @(zmodai)+

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

Discussions similaires

  1. xml parse avec javascript
    Par adel25 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/04/2009, 20h45
  2. [XML] Parsing avec Ant?
    Par Knuckles dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 17/06/2008, 09h28
  3. [JDOM] java & XML, problème de parsing avec JDOM
    Par OreillePointue dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 11/01/2008, 10h17
  4. [C][Expat][XML] Touver un champ avec expat
    Par chronos dans le forum C
    Réponses: 5
    Dernier message: 29/01/2007, 09h23
  5. [DOM XML] Parse XML DOM avec PHP
    Par ®om dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/01/2007, 16h58

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