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

GTK+ Discussion :

[Parser XML] Utilisation GMarkupParser


Sujet :

GTK+

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 168
    Par défaut [Parser XML] Utilisation GMarkupParser
    Bonjour,
    Je trouve très peu de doc sur lla librairie GTK pour le XML. Apparemment c'est une librairie relativement petite et j'avoue que les exemples ne cours pas les rues.
    J'ai tout de même réussi à écrire ça à partir d'exemple trouvé mais une erreur ressort (le problème viendrait du fichier XML) :

    Erreur à la ligne 1 caractère 1?? : Le document doit commencer par un élément (ex. <book>)
    Pour le caractère c'est pas lisible, la console (sous windows) m'affiche un "à".

    Voici le contenu de mon fichier XML (il est encodé en UTF8) :

    <item>
    <title>Titre 1</title>
    <description>Description 1</description>
    <command>Commande 1</command>
    <filename>Fichier 1</filename>
    </item>
    Et mon programme en C. Parser du XML c'est plus que flou encore pour moi, je ne comprend pas encore tous les mécanismes...

    #include <stdlib.h>
    #include <stdio.h>
    #include <glib.h>

    static void xml_start(GMarkupParseContext *context,
    const gchar *element_name,
    const gchar **attribute_names,
    const gchar **attribute_values,
    gpointer data,
    GError **error)
    {
    const gchar *element;
    element = g_markup_parse_context_get_element(context);
    }

    static void xml_end(GMarkupParseContext *context,
    const gchar *element_name,
    gpointer data,
    GError **error)
    {
    const gchar *element;
    element = g_markup_parse_context_get_element(context);
    }

    static void xml_element(GMarkupParseContext *context,
    const gchar *text,
    gsize text_len,
    gpointer data,
    GError **error)
    {
    const gchar *element;
    element = g_markup_parse_context_get_element(context);
    printf("> element : %s\n", (char*)element);
    }

    static void xml_err(GMarkupParseContext *context,
    GError *error,
    gpointer data)
    {
    g_printerr("error: %s\n", error->message);
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
    gchar* content = "C:\fc.xml";

    static GMarkupParser parser = { xml_start, xml_end, xml_element, NULL, xml_err };
    GMarkupParseContext *context;

    context = g_markup_parse_context_new (&parser, G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG, NULL, NULL);
    g_markup_parse_context_parse (context, "C:\fc.xml", -1, NULL);
    g_markup_parse_context_free (context);

    system("pause");
    return 0;
    }
    Si quelqu'un à une idée... une suggestion ! Merci de votre lecture.

    [Edit] Je n'avais pas vu l'existence du forum GTK+ dans bibliothèque... si un modérateur pense qu'il a plus sa place là bas... désolé.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Alors, déjà je tiens insister sur un point, sinon tu risques de te faire égorger par quelques puristes du XML GMarkupParser n'est pas un parseur XML. C'est un parseur pour un format fort similaire à du XML valide, mais il y a moyen de trouver des documents XML parfaitements valides que GMarkup ne sait pas parser, et probablement l'inverse aussi. Enfin pour l'utilisation que tu en fais, ça n'est pas un souci, mais garde en tête que si tu veux un vrai parseur XML qui respecte la spec XML à la lettre, GMarkupParser n'est pas adapté.

    En ce qui concerne ton problème, c'est l'appel à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g_markup_parse_context_parse (context, "C:\fc.xml", -1, NULL);
    qui ne va pas, le 2nd argument n'est pas un nom de fichier, mais une chaîne de caractère contenant tes données XML.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    gchar *xml_data;
    gboolean result;
    result = g_file_get_contents ("C:\fc.xml", &xml_data, NULL, NULL);
    if (!result) {
        return -1;
    }
    g_markup_parse_context_parse (context, xml_data, -1, NULL);
    g_free (xml_data);
    devrait faire l'affaire.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 168
    Par défaut
    Bonjour,
    Je viens de me rendre compte que mettre "C:\..." était trop facile
    Avec un content = "<book>test</book>";
    Ca fonctionne bien.

    Je n'ai pas lu grand chose sur GMarkupParser, donc merci de la précision !

    Merci de ta réponse et de ton aide

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 55
    Par défaut
    teuf13 : que conseillerais-tu si on veut un vrai parseur XML en C? (il en existe 2-3 mais pas facile de faire un choix ><)

    Merci de ta réponses d'avance.

    Kurapix

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    La libxml2 avec l'api xmltextreader

  6. #6
    Membre averti
    Inscrit en
    Février 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 21
    Par défaut
    Salut,
    J'utilise GTK, et d'après ce que vous dites, il est possible d'utiliser GMakupParser qui est dans GTK.
    J'ai donc essayé au sein d'un projet de simplement ajouter une variable de type :
    GMarkupParseContext *context;

    Mais j'ai une erreur au moment de la compilation :
    error C2275 : GMakupParserContext : utilisation non conforme de ce type comme expression

    J'ai pourtant bien mis mes includes :
    #include <gtk/gtk.h>
    #include <glib.h>
    Et d'autre librairies, pouvez vous m'expliquer mon erreur. Mon code source est celui de Wireshark (Ethereal).
    Je vous remercie.

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

Discussions similaires

  1. [GMarkup] Parser XML en C, comment l'utiliser ?
    Par Invité dans le forum GTK+ avec C & C++
    Réponses: 10
    Dernier message: 14/12/2010, 13h02
  2. Utilisation Parser XML
    Par guillaume40 dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/07/2008, 16h55
  3. [libxml] utilisation pour parser xml
    Par untipy dans le forum XML
    Réponses: 11
    Dernier message: 25/07/2007, 13h26
  4. parser xml
    Par billout dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/11/2003, 11h08
  5. Parser XML
    Par miloux32 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 18/07/2003, 03h17

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