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

Discussion :

[XML] Je n'arrive pas à lire un fichier XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 32
    Par défaut [XML] Je n'arrive pas à lire un fichier XML
    Bonjour,

    J'ai crée une appli toute simple et basique qui ouvre un fichier xml et le lit. Je voulais afficher une partie du contenu du fichier XML mais je n'obtiens rien.
    J'ai donc simplifier mon code au maximum pour trouver l'erreur, et je ne la trouve pas.
    Voici une partie du code de mainwindow.cpp
    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
     
    void MainWindow::ouvrir(){
        QString filename=QFileDialog::getOpenFileName(this,tr("Ouvrir un fichier"),".",tr("Fichiers XML (*.xml)"));
        if (!filename.isEmpty()){
            lireXML(filename);
        }
    }
    void MainWindow::lireXML(const QString &filename){
        QFile xml_doc(filename);
        if (!xml_doc.open(QFile::ReadOnly|QFile::Text)){
            QMessageBox::warning(this,"Info","erreur");
            return;
        }
        dom=new QDomDocument();
        if (!dom->setContent(&xml_doc)){
            xml_doc.close();
            QMessageBox::warning(this,"Info","erreur de lecture du fichier xml");
            return;
        }
        //lecture possible du fichier si ici
       QXmlStreamReader xml;
       xml.setDevice(&xml_doc);
       while (!xml.atEnd()){
           xml.readNext();
           if (xml.isStartElement()){
                nom="essai3";
           }
            nom="essai2";
       }
       QMessageBox::information(this,"Info",nom);
       xml_doc.close();
    }
    le fichier xml que j'essaie d'ouvrir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <info>
    </info>
    Lorsque je clique sur le bouton ouvrir de mon appli, je sélectionne le fichier xml en question et je n'ai aucune erreur de lecture qui ressort.
    Normalement mon qmessagebox que j'ai crée pour trouver l'erreur devrait m'afficher "essai3"
    Or il ne m'affiche que essai2.
    J'ai donc l'impression que la lecture du fichier xml ne se fait pas.
    J'ai regardé les tutos du site, la doc QT, l'exemple du Bookmark xml reader sur la doc QT et j'ai l'impression de bien faire mais ça ne marche pas.

    Merci par avance de votre aide
    Fabien

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 32
    Par défaut
    Je comprends pourquoi ilo ne lisait pas le fichier xml.
    J'avais fait le boulet et oublier :
    #include <QXmlStreamReader>

    J'ai modifier le code pour essayer d'aller chercher la balise info :
    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
     
    void MainWindow::ouvrir(){
        QString filename=QFileDialog::getOpenFileName(this,tr("Ouvrir un fichier"),".",tr("Fichiers XML (*.xml)"));
        if (!filename.isEmpty()){
            lireXML(filename);
        }
    }
    void MainWindow::lireXML( QString &filename){
        QFile xml_doc(filename);
        if (!xml_doc.open(QFile::ReadOnly|QFile::Text)){
            QMessageBox::warning(this,"Info","erreur");
            return;
        }
        dom=new QDomDocument();
        if (!dom->setContent(&xml_doc)){
            xml_doc.close();
            QMessageBox::warning(this,"Info","erreur de lecture du fichier xml");
            return;
        }
        //lecture possible du fichier si ici
       QXmlStreamReader xml;
       xml.setDevice(&xml_doc);
      while (!xml.atEnd() && !xml.hasError()){
          xml.readNext();
          nom="test";
          if (xml.StartElement){
              nom=xml.name().toString();
          }
       }
       QMessageBox::information(this,"Info",nom);
       xml_doc.close();
    }
    La qmessagebox m'affiche un nom vide.
    Cela veut dire que xml.name est vide et je ne comprends pas pourquoi.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 32
    Par défaut
    En reprenant des tutos sur XmlStreamReader et la doc Qt j'arrive à lire un fichier xml en indiquant directement le nom du fichier dans la fonction.
    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
     
     
    #include <QCoreApplication>
    #include <QDebug>
    #include <QXmlStreamReader>
    #include <QFile>
     
    int main(int argc, char *argv[])
    {
        QFile file("test.xml");
        if(!file.open(QFile::ReadOnly | QFile::Text)){
            qDebug() << "Cannot read file" << file.errorString();
            exit(0);
        }
     
        QXmlStreamReader reader(&file);
        QString nom;
        if (reader.readNextStartElement()) {
                if (reader.name() == "results"){
                    while(reader.readNextStartElement()){
                        if(reader.name() == "enfant"){
                            QString s = reader.readElementText();
                            qDebug(qPrintable(s));
                        }
                        else
                            reader.skipCurrentElement();
                    }
                }
                else
                    reader.raiseError(QObject::tr("Incorrect file"));
            }
     
            return 0;
    }
    Il ne me reste plus qu'à réessayer de faire de même en créant une fonction qui demande à l'utilisateur le fichier à charger avec un QFileDialog.

Discussions similaires

  1. je n'arrive pas à lire un fichier wav
    Par _vince_ dans le forum Général Python
    Réponses: 4
    Dernier message: 02/10/2010, 14h57
  2. Réponses: 1
    Dernier message: 07/06/2010, 10h23
  3. Je n'arrive pas à lire un fichier
    Par majudis dans le forum Débuter
    Réponses: 7
    Dernier message: 07/04/2010, 22h16
  4. Réponses: 6
    Dernier message: 18/09/2009, 09h35

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