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 :

Lire des fichiers XML en C++


Sujet :

C++

  1. #1
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut Lire des fichiers XML en C++
    Bonjour,

    Je suis un novice dans la programmation C++, je souhaiterais lire des fichiers XML (en particulier des fichiers XML décrivant des fichiers SVG) on m'a parlé de "libxml2" mais j'ai fait quelques recherches sur le net et j'ai trouvé que cette librairie est plutôt destinée au langage C pas le C++ !? ensuite j'ai trouvé libxml++ pour le C++ mais je ne sais pas est ce que c'est la meilleure bibliothèque à utiliser ? la plus simple et surtout je cherche une bibliothèque là où je peux trouver de la doc bien faite ?!

    Connaitriez vous une bonne bibliothèque pour les lire fichiers XML avec C++ (pas le C) ? moi ce qui m'intéresse c'est juste lire le fichier !

    Si vous avez des liens ou des documents à me conseiller je vous serai très reconnaissant.

    Merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Il existe également TinyXML.

  3. #3
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    Pour tinyxml, je n'ai pas su comment l'utiliser !!!

    ben je l'ai installer sous linux directement grace au shell, donc lorsque j'ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <tinyxml.h>
    ben il ne l'a pas reconnu au moment de la compilation !

    ensuite j'ai téléchargé un zip qui contient les sources de la bibliothèque tinyxml j'ai fait un make ensuite ... je n'ai pas su quoi faire ?

    Car j'ai deja vu cette lib en fait, j'ai commencé à lire un tuto sur developpez.net ce tuto

    et il dit qu'il faudrait compiler et copier le tinyxml.h et tinystr.h ainsi que le fichier .a

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Je ne pourrai pas t'aider : je l'ai utilisée il y a deux ou trois ans, et c'était sur Windows...

  5. #5
    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
    libxml++ est une bonne bibliothèque (la version ++ est un wrapper sur la version c si je ne me plante pas). Elle permet beaucoup plus que juste la lecture xml.

    TinyXml, je ne connais pas, mais si tu as juste besoin de lecture et de performance, il y a expat qui fonctionne bien (hmmm, je crois bien qu’expat c’est du C, même si ça s’utilise très bien en C++).

    Concernant ton problème d’inclusion, sous linux il faut bien installer les paquets -dev pour pouvoir développer (libtinyxml-dev sous debian, par exemple). Et normalement ça marche de suite.

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Citation Envoyé par ralf91 Voir le message
    Pour tinyxml, je n'ai pas su comment l'utiliser !!!

    ben je l'ai installer sous linux directement grace au shell, donc lorsque j'ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <tinyxml.h>
    ben il ne l'a pas reconnu au moment de la compilation !

    ensuite j'ai téléchargé un zip qui contient les sources de la bibliothèque tinyxml j'ai fait un make ensuite ... je n'ai pas su quoi faire ?

    Car j'ai deja vu cette lib en fait, j'ai commencé à lire un tuto sur developpez.net ce tuto

    et il dit qu'il faudrait compiler et copier le tinyxml.h et tinystr.h ainsi que le fichier .a
    Salut ! Alors... quelle distrib linux utilises-tu ? Si tu es sur ubuntu, il faut souvent installer un paquet supplémentaire qui contient les infos de dev et notamment les headers. Lance "synaptics" en root et cherche les paquets qui ont rapport à tinyxml. Il y en a sûrement un qui s'appelle tinyxml-dev ou quelque chose du genre.

    Ensuite si tu fais ton édition de lien comme il faut ça va bien se passer.

    Edit : J'avais pas vu le message de white-tentacle.

  7. #7
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    Salut
    Ben j'utilise la distribution Fedora pas Debian, mais le paquet tinyxml -dev est bien installé ! mais ça ne fonctionne toujours pas ?! pour l'édition des liens je ne vois pas trop ce que tu veux dire ?

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par ralf91 Voir le message
    Salut
    Ben j'utilise la distribution Fedora pas Debian, mais le paquet tinyxml -dev est bien installé ! mais ça ne fonctionne toujours pas ?! pour l'édition des liens je ne vois pas trop ce que tu veux dire ?
    Vérifie que le fichier /usr/include/tinyxml.h est bien présent, et que les librairies /usr/lib/libtinyxml.* sont bien présentes (il y a un .a et un .so, avec probablement un ou deux liens). Si ce n'est pas le cas, c'est que le package n'est pas installé. Si les fichiers sont présents, alors tu n'auras pas de problème.

    Lorsque tu compiles un projet qui utilise tinyxml, il faut rajouter l'option -ltinyxml à tes flags de compilation, sans quoi tu auras des erreurs pendant l'édition de lien (erreurs du type "unresolved external").

  9. #9
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    C'est tres etrange ! lorsque je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    yum install tinyxml
    Modules complémentaires chargés*: langpacks, presto, refresh-packagekit
    Configuration du processus d'installation
    Le paquet tinyxml-2.6.1-2.fc15.i686 est déjà installé dans sa dernière version
    Rien à faire
    Mais lorsque je vérifie dans :
    Je ne trouve pas le tinyxml.h !!!!!!!!!!!!!


    Franchement si on passe autant de temps pour l'installer !!! donc finalement le temps que l'on gagne pour lire des fichiers XML avec cette Lib on le perde dans l'installation !

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Citation Envoyé par ralf91 Voir le message
    Franchement si on passe autant de temps pour l'installer !!! donc finalement le temps que l'on gagne pour lire des fichiers XML avec cette Lib on le perde dans l'installation !
    Non, ça c'est parce que tu es un débutant que tu ne maîtrises pas l'installation et l'usage de bibliothèques sur linux. Ce n'est pas la faute de la lib, ce sera la même chose avec toutes. Pour ta culture, l'auteur de la bibliothèque n'est souvent pas responsable du programme d'installation (1 par distro, écrit par un mainteneur de paquet indépendant la plupart du temps).

    Si le header n'est pas dans /usr/include, il est peut-être ailleurs, dans /usr/local/include ou même un autre dossier. Tu utilises quel outil pour compiler ?

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Un petit makefile aurait été bienvenu, toutefois...

  12. #12
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    Non, ça c'est parce que tu es un débutant que tu ne maîtrises pas l'installation et l'usage de bibliothèques sur linux. Ce n'est pas la faute de la lib, ce sera la même chose avec toutes. Pour ta culture, l'auteur de la bibliothèque n'est souvent pas responsable du programme d'installation (1 par distro, écrit par un mainteneur de paquet indépendant la plupart du temps).
    Je suis désolé mais la première des choses à prendre en considération lorsqu'on développe quelques chose ... l'outil développé doit être facile à utiliser, sinon ça sert à rien de le développer juste pour une certaine catégorie qui tres minime (je parle en tant que développeur sous Windows) !!!

    Tu utilises quel outil pour compiler ?
    mon projet je le compile à l'aide de code::block ! donc le makefile est généré automatiquement !

  13. #13
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Personnellement, tinyxml est une lib tellement petite que quand je l'utilise je copie les fichiers sources (6 dans le pire des cas) directement dans mon propre projet et je les compile avec.

    Sinon, j'ai l'impression que ton problème, ralf91, ce ne sont pas les developpeurs de libs qui font mal leur travail, mais plutôt la somme de 2 facteurs: 1. tu ne connais pas l'O.S. sur lequel tu travaille. 2. Tu n'es pas très patient.

    Cordialement.

  14. #14
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    Ben effectivement, je ne connais pas tres bien l'OS et je suis un peu préssé, d'ailleurs c'est pour cela que jai choisi cette lib !

    bon revenons à nos moutons (enfin mes moutons :p) ben j'ai créé un projet de type static Library avec code::blocks et j'ai créé le fichier .a, je l'ai copié dans le dossier lib dans usr/lib et j'ai copié tinyxml.h et tinystr.h dans usr/include

    j'ai compilé mon projet test (présenté dans tuto de developpez.net) qui est le suivant :

    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
     
    #include "tinyxml.h"
    #include "lireXML.h"
    #include <string>
    #include <iostream>
     
    using namespace std;
     
    void LireXML::lirefichier(string chemin)
    {
        TiXmlDocument doc("carte.xml");
     
        if(!doc.LoadFile())
        {
            cerr << "erreur lors du chargement" << endl;
            cerr << "error #" << doc.ErrorId() << " : " << doc.ErrorDesc() << endl;
        }
        else
            cout<<"Fichier ouvert avec succes !"<<endl;
    }
    maintenant il me semble qu'il reconnait mon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include "tinyxml.h"
    mais il m'affiche une autre erreur :
    obj/Debug/lireXML.o||In function `LireXML::lirefichier(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)': |

    /home/Raf/Documents/testC++/lireFichierXML/MyXMLReader/lireXML.cpp|10|undefined reference to `TiXmlDocument::TiXmlDocument(char const*)'|

    /home/Raf/Documents/testC++/lireFichierXML/MyXMLReader/lireXML.cpp|12|undefined reference to `TiXmlDocument::LoadFile(TiXmlEncoding)'|

    obj/Debug/lireXML.o||In function `TiXmlString::quit()': |

    /usr/include/tinystr.h|241|undefined reference to `TiXmlString::nullrep_'|

    obj/Debug/lireXML.o||In function `~TiXmlDocument': |

    /usr/include/tinyxml.h|1409|undefined reference to `vtable for TiXmlDocument'|

    /usr/include/tinyxml.h|1409|undefined reference to `TiXmlNode::~TiXmlNode()'|
    ||=== Build finished: 5 errors, 0 warnings ===|
    comme s'il n'a pas reconnu le contenu des fichiers !

    Ps : j'ai essayé comme t'as dit r0d, j'ai copié tous les .h et .cpp dans mon projet et j'ai eu la même erreur que tout à l'heure (il reconnait tinyxml.h mais pas le reste !)

  15. #15
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ralf91 Voir le message
    Ps : j'ai essayé comme t'as dit r0d, j'ai copié tous les .h et .cpp dans mon projet et j'ai eu la même erreur que tout à l'heure (il reconnait tinyxml.h mais pas le reste !)
    Il faut aussi que tu ajoutes ces fichiers à ton projet dans code::blocks. Sinon ils ne sont pas compilés.

  16. #16
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    oui j'ai ajouté les 6 fichier dans le dossier de mon projet
    tinystr.cpp tinystr.h tinyxml.cpp tinyxml.h tinyxmlerror.cpp tinyxmlparser.cpp

    et ça ne marche toujours pas, j'ai vu sur un forum un truc d'édition de lien entre mon projet le fichier .a que j'ai créé ?

  17. #17
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Citation Envoyé par ralf91 Voir le message
    Je suis désolé mais la première des choses à prendre en considération lorsqu'on développe quelques chose ... l'outil développé doit être facile à utiliser, sinon ça sert à rien de le développer juste pour une certaine catégorie qui tres minime (je parle en tant que développeur sous Windows) !!!
    L'outil n'est pas difficile à utiliser : c'est toi qui ne sait pas t'en servir, ça n'a rien à voir. Du reste, les problèmes d'include et de link sont valables sous windows, tu aurais eu exactement les mêmes ennuis !

    Je pourrais t'aider plus si j'avais mon linux sous la main (pour vérifier la validité de mes conseils avant de te les donner), je laisse ceux dont c'est le cas continuer, ou je le ferais de chez moi.

    Edit : Ok j'avais pas vu l'idée de copier la lib dans ton projet, c'est pas une mauvaise idée. Il y a effectivement une histoire d'édition de lien, mais vu que tu compiles tout toi même dans un seul exe (arrête moi si je me trompe), tu ne crées pas de *.a. Le link sur un *.a, c'est justement quand tu ne compiles pas toi même la lib.

  18. #18
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    ben ça fonctionne enfin ....

    En fait je me prenais la tête pour rien ! j'ai ajouté les 6 fichiers dans mon projet à l'aide de Code::Blocks du coup il compile mon projet et les 6 fichiers en même temps et ça marche !

  19. #19
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Citation Envoyé par ralf91 Voir le message
    ben ça fonctionne enfin ....

    En fait je me prenais la tête pour rien ! j'ai ajouté les 6 fichiers dans mon projet à l'aide de Code::Blocks du coup il compile mon projet et les 6 fichiers en même temps et ça marche !
    Pas pour rien... le jour où tu auras besoin d'une lib trop importante pour être incluse dans ton projet, tu tomberas sur les mêmes soucis, qu'il faudra régler de la vraie bonne manière cette fois ci.

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

Discussions similaires

  1. Lire des fichiers XML depuis Word
    Par sanandreas1202 dans le forum VBA Word
    Réponses: 0
    Dernier message: 24/08/2012, 11h01
  2. Problème pour lire des fichiers XML avec tFileInputXML- probleme format date
    Par rogermar dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 06/10/2010, 15h46
  3. [DOM] lire un fichier XML ou il existe des liste
    Par lakerr dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 08/06/2009, 18h57
  4. Lire des fichiers XML
    Par bebel60fr dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 01/12/2006, 12h40
  5. [Rech. Comp.] Lire et écrire dans des fichiers XML
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2005, 21h48

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