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 :

[TinyXML2] LoadFile ne fonctionne pas


Sujet :

XML

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 7
    Points : 6
    Points
    6
    Par défaut [TinyXML2] LoadFile ne fonctionne pas
    Bonjour à tous,

    Je tente d'utiliser la bibliothèque TinyXml2 pour récupérer les informations d'un xml.
    Je travaille sous Linux avec QtCreator.

    Voilà ce qui se passe : j'utilise un QFileDialog::getOpenFileName pour récupérer le chemin vers mon fichier xml. Jusque là, tout se passe bien, je récupère un QString.

    Ensuite, je le passe en string, puis en char, car, d'après ce que j'ai compris, la fonction LoadFile de TinyXml prend des char en entrée. Mais quand je compile, l'erreur suivante est renvoyée : "no matching function to call to tinyxml2::XMLDocument::LoadFile(QString&)". Du coup j'ai aussi essayé en passant directement le chemin du xml en tant que QString et string, mais rien, ça ne marche pas non plus.

    Voici un bout du code.

    Au tout début du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <tinyxml2.h>
    #define TIXML_USE_STL
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # Recuperation du chemin du fichier xml
    QString xml_path;
    xml_path=QFileDialog::getOpenFileName(this,QObject::tr("Select xml file"), "/home",QObject::tr("XML files (*.xml)"));
     
    # Creation du document xml qui sera manipulé
    tinyxml2::XMLDocument xml_Doc;
     
    # Passage du chemin de QString en char
    xml_path=(char*)xml_path.toUtf8().constData();
     
    # Chargement du fichier xml
    xml_Doc.LoadFile(xml_path);
    Voilà voilà. Quelqu'un a une idée ? Merci d'avance.

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    xml_path est de type QString. Les objets ne mutent pas en C++, ils conservent le type avec lequel ils ont été déclarés toute leur durée de vie. Il faut passer directement xml_path.toUtf8().constData() (de type const char *) à tinyxml.

    Mais tu te compliques la vie : pourquoi utiliser un parser XML tiers sur un projet Qt plutôt que la solution Qt dédiée ?

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Ok merci, effectivement ça marche !
    Je n'utilise pas la solution Qt car je n'y comprends pas grand chose ! Il y a beaucoup beaucoup de méthodes, de membres et c'est difficile de trouver de quoi j'ai réellement besoin. Utiliser TinyXml, qui contient vraiment le stricte nécessaire me semblait plus simple. Il y a peu de commandes et il est plus facile de s'y retrouver. J'ai seulement besoin d'écrire des xml et de récupérer les valeurs contenues à l'intérieur. Et puis comme ça j'ai découvert comment importé une bibliothèque sous Qt, au passage...

    Merci pour la réponse, ça marche très bien !
    Bonne journée à vous !

  4. #4
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    C'est toi qui voit. Soit dit en passant ce n'est pas en lisant la doc qu'on détermine ce dont on a besoin. On écrit l'algo en amont, on détermine les opérations nécessaires et on consulte ensuite la documentation pour comprendre comment la solution technique va permettre d'implémenter ces opérations.

  5. #5
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 110
    Points
    6 110
    Par défaut
    Personnellement, ayant utilisé QDomDocument de Qt et TinyXML, je trouve TinyXML à la fois plus pratique et bien mieux documenté.

    Cependant, tous les deux chargent en mémoire le XML entier, ce qui n'est pas le cas de QXmlStreamReader de Qt.

    Edit :

    Citation Envoyé par cestquoica Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <tinyxml2.h>
    #define TIXML_USE_STL
    Le #define TIXML_USE_STL ne doit pas être là.
    Si tu veux pouvoir utiliser les fonctions de TinyXML qui acceptent en paramètre des types de la STL, il faut que TIXML_USE_STL soit défini :
    • pour compiler les cpp de TinyXML (sinon, lesdites fonctions ne seront pas définies) et
    • avant d'inclure les .h de TinyXML (sinon, lesdites fonctions ne seront pas déclarées).

    En fait, si les cpp de TinyXML appartiennent à la liste des cpp de ton projet, il faut ajouter TIXML_USE_STL dans les définitions conditionnelles du projet. L'effet sera le même que si chaque cpp de ton projet commence par #define TIXML_USE_STL.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  2. [FP]Writeln ne fonctionne pas !
    Par néo333 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 01/11/2003, 23h47
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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