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 :

Lecture d'un fichier XML et recherche

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Par défaut Lecture d'un fichier XML et recherche
    Bonjour ,

    voila j'ai un fichier xml dans lequel je lit des paramètre qui vont correspondre à différents boutons !
    Or j'aimerais pour certains boutons ajouter un profil ! le fichier xml le voici

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="UTF-8"?>
    <Villes>
     
    		<Zones>
    		<nomZone>Paris</nomZone>
    		<villesZone>
    			<nom>Paris Est</nom>
                                                     <prof>C:/ott.exe</prof>
    		</villesZone>
    		<villesZone>
    			<nom>Paris Est</nom>
                                                    <prof>C:/ip..exe</prof>
    		</villesZone>
    	</Zones>
     </Villes>

    Le problème que j'ai c'est lorsque que je choisi une ville de la zone ça m'exécute le mauvais prof
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     if(racine.tagName() == "Zones")
            {
                // On récupère le premier enfant de l'élément Zones c'est a dire <nomZone>
                QDomElement unElement = racine.firstChildElement();
     
                // On parcourt tous les enfants de l'élément <Zones>
                while(!unElement.isNull())
                {
     
                    // Si on pointe sur un élément de type <villesZones> dans la partie <Zones>
                    if(unElement.tagName() == "villesZone")
                    {
     
                        QDomElement unElementVilleZone = unElement.firstChildElement();
     
                        // On parcourt tous les enfants de l'élément <villesZones>
                        while(!unElementVilleZone.isNull())
                        {
                            // Si l'enfant de l'élément site est l'élément <nom>
                            if(unElementVilleZone.tagName() == "nom")
                            {
                                // On récupère le texte contenu dans la balise <nom>
                                str_NomVilleZone = unElementVilleZone.text();
                                strl_listeVilleZone.append(str_NomVilleZone);
                            }
                             if(unElementVilleZone.tagName()== "prof"){
                                        str_ExecVille = unElementVilleZone.text();
     
                             }
                                    unElementVilleZone = unElementVilleZone.nextSiblingElement();
                           }
                                set_ListeProfil_str(strl_listeProfils);
     
                                unElementVilleZone = unElementVilleZone.nextSiblingElement();
                    }
                    }
     
                    // Permet d'aller au prochain enfant de <site> et de poursuivre la boucle
                    unElement = unElement.nextSiblingElement();
                }
     
     
                // création d'une Zone contenant plusieurs villes sur la carte
                btn_Zone= new QPushButton(this);
                btn_Zone->resize(50,50);
                btn_Zone->setText(str_NomZone);
                btn_Zone->setToolTip(str_NomZone);
                btn_Zone->move(str_CoordxZone.toInt(),str_CoordyZone.toInt());
     
                set_ListeVilles_str(strl_listeVilleZone);
     
              QSignalMapper *signalMapper2 = new QSignalMapper(this);
                       QObject::connect(signalMapper2, SIGNAL(mapped(QString)), this, SLOT(afficher_ListeVilles(QString)));
                          //Mappage, puis connexion du signal au mapper
                signalMapper2->setMapping(btn_Zone,str_ExecVilleZone);
               QObject::connect(btn_Zone, SIGNAL(clicked()), signalMapper2, SLOT(map()));
     
            }
     
     
            // On va à l'élément fils de <root> suivant
            racine = racine.nextSiblingElement();
     
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void Projet::afficher_ListeVilles(QString exec_VilleZone){
     
     
        bool ok;
        QString item = QInputDialog::getItem(this, tr("QInputDialog::getItem()"),
                                             tr("Villes Zone"), get_ListeVilles_str(), 0, false, &ok);
        if (ok && !item.isEmpty()){
            QMessageBox::information(this, "Coix de la ville appartenant à une zone", "La ville choisie est : "+item);
            process_Site->startDetached(exec_VilleZone);
        }
     
    }
    je bloque depuis des jours ! merci par avance pour l'aide !

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut
    Hello,

    La première chose à faire est de vérifier que le contenu des listes strl_listeProfils et strl_listeVilleZone est bien correct lors de la lecture des données depuis XML. Par exemple en utilisant qDebug() << strl_listeProfils; (sans oublier #include <QDebug>).

    Il faut être sûre que ces données sont correctes avant de continuer plus loin.

    Est-ce que le code C++ de lecture du XML est bien le code utilisé ? Il semble qu'il y ait quelques erreurs (en rouge):

    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
    51
    52
    if(racine.tagName() == "Zones")
     {
         // On récupère le premier enfant de l'élément Zones c'est a dire <nomZone>
         QDomElement unElement = racine.firstChildElement();
         
         // On parcourt tous les enfants de l'élément <Zones>
         while(!unElement.isNull())
         {
             
             // Si on pointe sur un élément de type <villesZones> dans la partie <Zones>
             if(unElement.tagName() == "villesZone")
             {
                 //Est-ce bien sûre que le premier élément sera le premier dans le fichier ? 
                 //Cela semble logique, mais je pense que cela mérite vérification. 
                 //il est possible de faire unElement.firstChildElement("nomZone"); afin d'être sûre de prendre le bon élément
                 QDomElement unElementVilleZone = unElement.firstChildElement();
                 
                 // On parcourt tous les enfants de l'élément <villesZones>
                 while(!unElementVilleZone.isNull())
                 {
                     // Si l'enfant de l'élément site est l'élément <nom>
                     if(unElementVilleZone.tagName() == "nom")
                     {
                         // On récupère le texte contenu dans la balise <nom>
                         str_NomVilleZone = unElementVilleZone.text();
                         strl_listeVilleZone.append(str_NomVilleZone);
                     }
                     if(unElementVilleZone.tagName()== "prof"){
                         str_ExecVille = unElementVilleZone.text();
                         //Ligne présumée manquante
                         strl_listProfils.append(str_ExecVille);
                     }
                     unElementVilleZone = unElementVilleZone.nextSiblingElement();
                 }
                 
                 //strl_listProfils n'est remplie nulle part dans le code précédent, à moins qu'une partie soit manquante
                 set_ListeProfil_str(strl_listeProfils);
                 
                 //Cette ligne est inutile, nous sommes déjà sorti de la boucle. 
                 unElementVilleZone = unElementVilleZone.nextSiblingElement();
             }
         }
         
        // Permet d'aller au prochain enfant de <site> et de poursuivre la boucle
         //Cette ligne devrait se situé dans la boucle while(!unElement.isNull())
         unElement = unElement.nextSiblingElement();
     }
     
     //Suite.... 
    
     }
    Sinon, voir le code en entier pourrait aider si c'est possible.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 17
    Par défaut reponse
    Hello,

    J'ai vu que tu utilises la méthode QDOM.

    Ci-joint, un bout de code que j'ai codé et ça marche bien dans mon cas:
    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
    51
    52
    53
    54
    55
    56
    57
     
        QFile file1("bloc.xml");
         QDomDocument doc ("file1");
     
        if (!file1.open(QIODevice::ReadOnly))
        {
            qDebug()<<"failed to open";
                return 1;
        }
        else
     
            if (!doc.setContent(&file1)) {
                qDebug()<<"failed to load document";
                file1.close();
                return 0;
            }
            file1.close();
     
     
         //Get the root element
            QDomElement block = doc.documentElement();
            QDomElement root1=doc.firstChildElement();
     
            //ListElement(root1,"category","ids");
            QString text1;
            QDomElement element1 = doc.documentElement();
            for(QDomNode n = element1.firstChild(); !n.isNull(); n = n.nextSibling())
            {
                QDomText t = n.toText();
                if (!t.isNull())
                    text1 += t.data();
            }
     
           QDomNode nodeCatblock = block.firstChild();
           QDomElement eltCatblock = nodeCatblock.toElement();
     
     
     
           QDomNode nodePathesblock = nodeCatblock.nextSibling();
           QDomNodeList cathegori=root1.elementsByTagName("category");
     
           for(int i=0;i<cathegori.count();i++)
           {
            QDomNode cathegoriNode=cathegori.at(i);
     
            //convert to element
               if(cathegoriNode.isElement())
               {
                   QDomElement cathegoriel=cathegoriNode.toElement();
     
                   qDebug()<<cathegoriel.attribute("ids");
     
     
               }
     
           }
           qDebug()<<"total item cathegory dans bloc.xml = "<<cathegori.count();
    Cordialement,

Discussions similaires

  1. Problème de lecture d'un fichier XML d'InfoPath
    Par snadus dans le forum InfoPath
    Réponses: 7
    Dernier message: 06/06/2006, 14h45
  2. Lecture d'un fichier XML de config avec Java
    Par cofy dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 31/01/2006, 15h54
  3. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13
  4. Probleme de lecture d'un fichier XML
    Par chleuh dans le forum Langage
    Réponses: 8
    Dernier message: 30/08/2005, 12h04
  5. [C#] [XML] Lecture d'un fichier XML => Combobox
    Par Chad`Chiwa dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/03/2005, 08h57

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