Bonjour à tous,

Dans le cadre d'un projet de taff, je réalise un carnet d'adresse.

Je suis sur la partie Sauvegarde/Chargement et je pars sur du XML, j'en ai déjà faits en C# et ca fonctionnait bien mais la avec la Lib Qt il y a des éléments sur lesquels je bloque ..

Le code de l'ecriture : (Qui fonctionne et me génère le fichier xml comme il faut)

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
    QString sFileXMLName = QFileDialog::getSaveFileName(this, tr("Save PhoneBook in Xml File"), "C:/ ...", tr("Fichier Xml (*.xml)"));
 
    //QString sFileXMLName = "E:/SavePhoneBook.xml";
 
    QFile fFileXML(sFileXMLName);
 
    //Ouverture du fichier en ecriture et en texte (sortie si le fichier ne s'ouvre pas)
    if(!fFileXML.open(QFile::WriteOnly | QFile::Text))
        return;
 
    QXmlStreamWriter xmlWriter(&fFileXML);
 
    //Active l'indentation auto du fichier XML
    xmlWriter.setAutoFormatting(true);
 
    //Insert la norme de codification du fichier XML
    xmlWriter.writeStartDocument();
 
    //Element racine du fichier XML
    xmlWriter.writeStartElement("Root PhoneBook");
 
    for(int i = 0 ; i < m_MyPhoneBook.m_pSheetList->size() ; ++i)
    {
        //Element contact
        xmlWriter.writeStartElement("ContactID");
 
        //Element Contact Infos
        xmlWriter.writeStartElement("ContactInfos");
        //Ajoute l'élément "ContactName" avec l'attribut "GetContactName" puis ferme l'élément "ContactName"
        xmlWriter.writeTextElement("ContactName", m_MyPhoneBook.m_pSheetList->at(i)->GetContactName());
        xmlWriter.writeTextElement("ContactFirstName", m_MyPhoneBook.m_pSheetList->at(i)->GetContactFirstName());
        xmlWriter.writeTextElement("ContactCivility", m_MyPhoneBook.m_pSheetList->at(i)->GetContactCivility());
        xmlWriter.writeTextElement("ContactFunction", m_MyPhoneBook.m_pSheetList->at(i)->GetContactFunction());
        xmlWriter.writeTextElement("ContactDepartment", m_MyPhoneBook.m_pSheetList->at(i)->GetContactDepartment());
        xmlWriter.writeTextElement("ContactAdress", m_MyPhoneBook.m_pSheetList->at(i)->GetContactAdress());
        xmlWriter.writeTextElement("ContactCity", m_MyPhoneBook.m_pSheetList->at(i)->GetContactCity());
        xmlWriter.writeTextElement("ContactState", m_MyPhoneBook.m_pSheetList->at(i)->GetContactState());
        xmlWriter.writeTextElement("ContactZipCode", m_MyPhoneBook.m_pSheetList->at(i)->GetContactZipCode());
        xmlWriter.writeTextElement("ContactCountry", m_MyPhoneBook.m_pSheetList->at(i)->GetContactCountry());
        xmlWriter.writeTextElement("ContactMail1", m_MyPhoneBook.m_pSheetList->at(i)->GetContactMail1());
        xmlWriter.writeTextElement("ContactMail2", m_MyPhoneBook.m_pSheetList->at(i)->GetContactMail2());
        xmlWriter.writeTextElement("ContactPhone", QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetContactPhoneNumber()));
        xmlWriter.writeTextElement("ContactCellPhone", QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetContactCellPhoneNumber()));
        xmlWriter.writeTextElement("ContactOtherPhone", QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetContactOtherPhoneNumber()));
        xmlWriter.writeTextElement("ContactFax", QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetContactFaxNumber()));
        xmlWriter.writeTextElement("ContactVarious", m_MyPhoneBook.m_pSheetList->at(i)->GetContactVarious());
        //Ferme Element "ContactInfos"
        xmlWriter.writeEndElement();
 
        //Ajoute Element "CorpInfos"
        xmlWriter.writeStartElement("CorpInfos");
        //Ajout les éléments des infos de l'entreprise
        xmlWriter.writeTextElement("CorpName", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpName());
        xmlWriter.writeTextElement("CorpAdress", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpAdress());
        xmlWriter.writeTextElement("CorpCity", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpCity());
        xmlWriter.writeTextElement("CorpState", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpState());
        xmlWriter.writeTextElement("CorpZipCode", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpZipCode());
        xmlWriter.writeTextElement("CorpCountry", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpCountry());
        xmlWriter.writeTextElement("CorpWebAdress", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpWebAdress());
        xmlWriter.writeTextElement("CorpMail1", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpMail1());
        xmlWriter.writeTextElement("CorpMail2", m_MyPhoneBook.m_pSheetList->at(i)->GetContactMail2());
        xmlWriter.writeTextElement("CorpPhone", QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpPhoneNumber()));
        xmlWriter.writeTextElement("CorpFax", QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpFaxNumber()));
        xmlWriter.writeTextElement("CorpOtherPhone", QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpOtherPhoneNumber()));
        xmlWriter.writeTextElement("CorpSiret", QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpSiretNumber()));
        xmlWriter.writeTextElement("CorpTVA", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpTVAIntra());
        xmlWriter.writeTextElement("CorpPaymentCondition", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpPaymentCondition());
        xmlWriter.writeTextElement("CorpVarious", m_MyPhoneBook.m_pSheetList->at(i)->GetCorpVarious());
        //Ferme Element "CorpInfos"
        xmlWriter.writeEndElement();
 
        //Ferme Element ContactID
        xmlWriter.writeEndElement();
    }
 
    //Ferme Element Racine "Root PhoneBook"
    xmlWriter.writeEndElement();
 
    //Finalise le document XML
    xmlWriter.writeEndDocument();
 
    //Ferme le fichier XML pour enregistrer le document
    fFileXML.close();
Le code de lecture :
(Qui me pose des soucis car il ne rentre jamais dans l’élément "ContactID" et je ne vois pas comment boucler et effectuer la même action sur chacun des éléments "ContactID")
En C# je listait les node et avec une simple boucle foreach avec : pour chaque "Node" dans ma "liste de Node" fait mon traitement.

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
    QString sFilePath = QFileDialog::getOpenFileName(this, tr("Open XML File ..."), "E:/", tr("XMLFile (*.xml)"));
 
    if(sFilePath.isEmpty())
    {
        QMessageBox::critical(this, tr("Open File XML"), tr("Le fichier xml est vide !"));
        return;
    }
 
    //Infos du fichier
    QFileInfo fileInfo(sFilePath);
    //Dossier du fichier
    QDir dir = fileInfo.dir();
    //Path du fichier
    QString sDirPath = fileInfo.filePath();
    //Nom du fichier
    QString sFileXmlName = fileInfo.fileName();
 
    //Objet de lecture de fichier XML
    QXmlStreamReader xmlReader;
    //Fichier XML
    QFile fFileXml(sFilePath);
 
    //Ouverture du fichier XML en lecture seule
    if(!fFileXml.open(QFile::ReadOnly | QFile::Text))
    {
        QMessageBox::critical(this, tr("Open File XML"), tr("Le fichier ne s'ouvre pas !"), QMessageBox::Ok);
        return;
    }
 
    //Initialise l'instance xmlReader avec le flux XML venant de file
    xmlReader.setDevice(&fFileXml);
 
    //Parcours des noeuds element et recup des element text pr attribution aux parametres de la fiche contact
    //TODO
 
    //Parcours du fichier xml tant que la fin n'est pas atteinte ou qu'il n y a pas d'erreurs
    while(!xmlReader.atEnd() && !xmlReader.hasError())
    {
        //Lecture next element
        QXmlStreamReader::TokenType Token = xmlReader.readNext();
 
        //Si token est est StartDocument on continue
        if(Token == QXmlStreamReader::StartDocument)
            continue;
 
        //Si token est StartElement on le lit
        if(Token == QXmlStreamReader::StartElement)
        {
            if(xmlReader.name() == "PhoneBook")
            {
                if(xmlReader.name() == "ContactID")
                {
                    //Création de la fiche contact
                    DataSheet *MySheetContact = new DataSheet();
 
                    if(xmlReader.name() == "ContactInfos")
                    {
                        MySheetContact->SetContactName(xmlReader.readElementText());
                        MySheetContact->SetContactFirstName(xmlReader.readElementText());
                        MySheetContact->SetContactCivility(xmlReader.readElementText());
                        MySheetContact->SetContactFunction(xmlReader.readElementText());
                        MySheetContact->SetContactDepartment(xmlReader.readElementText());
                        MySheetContact->SetContactAdress(xmlReader.readElementText());
                        MySheetContact->SetContactCity(xmlReader.readElementText());
                        MySheetContact->SetContactState(xmlReader.readElementText());
                        MySheetContact->SetContactZipCode(xmlReader.readElementText());
                        MySheetContact->SetContactCountry(xmlReader.readElementText());
                        MySheetContact->SetContactMail1(xmlReader.readElementText());
                        MySheetContact->SetContactMail2(xmlReader.readElementText());
                        MySheetContact->SetContactPhoneNumber(xmlReader.readElementText().toInt());
                        MySheetContact->SetContactCellPhoneNumber(xmlReader.readElementText().toInt());
                        MySheetContact->SetContactOtherPhoneNumber(xmlReader.readElementText().toInt());
                        MySheetContact->SetContactFaxNumber(xmlReader.readElementText().toInt());
                        MySheetContact->SetContactVarious(xmlReader.readElementText());
                    }
 
                    if(xmlReader.name() == "CorpInfos")
                    {
                        MySheetContact->SetCorpName(xmlReader.readElementText());
                        MySheetContact->SetCorpAdress(xmlReader.readElementText());
                        MySheetContact->SetCorpCity(xmlReader.readElementText());
                        MySheetContact->SetCorpState(xmlReader.readElementText());
                        MySheetContact->SetCorpZipCode(xmlReader.readElementText());
                        MySheetContact->SetCorpCountry(xmlReader.readElementText());
                        MySheetContact->SetCorpWebAdress(xmlReader.readElementText());
                        MySheetContact->SetCorpMail1(xmlReader.readElementText());
                        MySheetContact->SetCorpMail2(xmlReader.readElementText());
                        MySheetContact->SetCorpPhoneNumber(xmlReader.readElementText().toInt());
                        MySheetContact->SetCorpFaxNumber(xmlReader.readElementText().toInt());
                        MySheetContact->SetCorpOtherPhoneNumber(xmlReader.readElementText().toInt());
                        MySheetContact->SetCorpSiretNumber(xmlReader.readElementText().toInt());
                        MySheetContact->SetCorpTVAIntra(xmlReader.readElementText());
                        MySheetContact->SetCorpPaymentCondition(xmlReader.readElementText());
                        MySheetContact->SetCorpVarious(xmlReader.readElementText());
                    }
                    //Ajout à la liste de fiche contact
                    m_MyPhoneBook.m_pSheetList->push_back(MySheetContact);
                }
            }
        }
    }
 
    //Message affichant l'erreur de Parsing (Si erreur il y a)
    if(xmlReader.hasError())
    {
        QMessageBox::critical(this, sFileXmlName + tr(" Parse Error"), xmlReader.errorString(), QMessageBox::Ok);
        return;
    }
Voila en espérant avoir été assez clair .. ça ne doit pas se jouer à grand chose je pense mais la je bloque depuis hier dessus :/

Merci d'avance pour vos réponses