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

Qt Discussion :

Lecture et écriture de fichiers XML avec QXmlStreamWriter/Reader


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Lecture et écriture de fichiers XML avec QXmlStreamWriter/Reader
    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

  2. #2
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    Ça ne marche pas comme ça
    Il faut surcharger les fonctions qui t intéressent
    Tu as un exemple de carnet d adresse dans les exemples fournis par Qt
    Si tu n y arrives pas avec ça refais nous signe
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    Bon j'ai réussi en utilisant le QDomDocument ^^

    Pour les curieux, Ecriture :

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    void MyMainWindow::SavePhoneBookXML()
    {
        //Récupération de l'emplacement où doit etre placé le fichier Xml
        //QString sName = QFileDialog::getSaveFileName(this, tr("Save PhoneBook in Xml File"), "C:/ ...", "Fichier Xml (*.xml)");
     
        //Emplacement et nom du fichier
        QString sName = "../Address_Book_Save.xml";
     
        //Création du QDomDoc qui servira de tampon pr les données contenues dans le fichier Xml
        QDomDocument domDoc;
     
        //Ajout de commentaires
        domDoc.appendChild(domDoc.createComment("Ce fichier contient les contacts du carnet d'adresse"));
        domDoc.appendChild(domDoc.createTextNode("\n"));
     
        //Noeud Racine Phonebook
        QDomElement domElementPhoneBookNode = domDoc.createElement("PhoneBook");
        domDoc.appendChild(domElementPhoneBookNode);
     
        //Parcours de la liste de contacts et récupération des infos de chacuns
        for(int i = 0 ; i < m_MyPhoneBook.m_pSheetList->size() ; ++i)
        {
            //Node Contact
            QDomElement domContactNode = domDoc.createElement("Contact");
            //Contact Nom
            QDomElement domContactName = domDoc.createElement("ContactName");
            domContactName.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactName()));
            domContactNode.appendChild(domContactName);
            //Contact Prenom
            QDomElement domContactFirstName = domDoc.createElement("ContactFirstName");
            domContactFirstName.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactFirstName()));
            domContactNode.appendChild(domContactFirstName);
            //Contact Civility
            QDomElement domContactCivility = domDoc.createElement("ContactCivility");
            domContactCivility.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactCivility()));
            domContactNode.appendChild(domContactCivility);
            //Contact Fonction
            QDomElement domContactFunction = domDoc.createElement("ContactFunction");
            domContactFunction.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactFunction()));
            domContactNode.appendChild(domContactFunction);
            //Contact Department
            QDomElement domContactDepartment = domDoc.createElement("ContactDepartment");
            domContactDepartment.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactDepartment()));
            domContactNode.appendChild(domContactDepartment);
            //Contact Adress
            QDomElement domContactAdress = domDoc.createElement("ContactAdress");
            domContactAdress.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactAdress()));
            domContactNode.appendChild(domContactAdress);
            //Contact City
            QDomElement domContactCity = domDoc.createElement("ContactCity");
            domContactCity.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactCity()));
            domContactNode.appendChild(domContactCity);
            //Contact State
            QDomElement domContactState = domDoc.createElement("ContactState");
            domContactState.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactState()));
            domContactNode.appendChild(domContactState);
            //Contact ZipCode
            QDomElement domContactZipCode = domDoc.createElement("ContactZipCode");
            domContactZipCode.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactZipCode()));
            domContactNode.appendChild(domContactZipCode);
            //Contact Country
            QDomElement domContactCountry = domDoc.createElement("ContactCountry");
            domContactCountry.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactCountry()));
            domContactNode.appendChild(domContactCountry);
            //Contact Mail1
            QDomElement domContactMail1 = domDoc.createElement("ContactMail1");
            domContactMail1.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactMail1()));
            domContactNode.appendChild(domContactMail1);
            //Contact Mail2
            QDomElement domContactMail2 = domDoc.createElement("ContactMail2");
            domContactMail2.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactMail2()));
            domContactNode.appendChild(domContactMail2);
            //Contact Phone
            QDomElement domContactPhone = domDoc.createElement("ContactPhone");
            domContactPhone.appendChild(domDoc.createTextNode(QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetContactPhoneNumber())));
            domContactNode.appendChild(domContactPhone);
            //Contact CellPhone
            QDomElement domContactCellPhone = domDoc.createElement("ContactCellPhone");
            domContactCellPhone.appendChild(domDoc.createTextNode(QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetContactCellPhoneNumber())));
            domContactNode.appendChild(domContactCellPhone);
            //Contact Fax
            QDomElement domContactFax = domDoc.createElement("ContactFax");
            domContactFax.appendChild(domDoc.createTextNode(QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetContactFaxNumber())));
            domContactNode.appendChild(domContactFax);
            //Contact OtherPhone
            QDomElement domContactOtherPhone = domDoc.createElement("ContactOtherPhone");
            domContactOtherPhone.appendChild(domDoc.createTextNode(QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetContactOtherPhoneNumber())));
            domContactNode.appendChild(domContactOtherPhone);
            //Contact Divers
            QDomElement domContactVarious = domDoc.createElement("ContactVarious");
            domContactVarious.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetContactVarious()));
            domContactNode.appendChild(domContactVarious);
     
            //Corp Name
            QDomElement domCorpName = domDoc.createElement("CorpName");
            domCorpName.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpName()));
            domContactNode.appendChild(domCorpName);
            //Corp Adress
            QDomElement domCorpAdress = domDoc.createElement("CorpAdress");
            domCorpAdress.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpAdress()));
            domContactNode.appendChild(domCorpAdress);
            //Corp City
            QDomElement domCorpCity = domDoc.createElement("CorpCity");
            domCorpCity.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpCity()));
            domContactNode.appendChild(domCorpCity);
            //Corp ZipCode
            QDomElement domCorpZipCode = domDoc.createElement("CorpZipCode");
            domCorpZipCode.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpZipCode()));
            domContactNode.appendChild(domCorpZipCode);
            //Corp State
            QDomElement domCorpState = domDoc.createElement("CorpState");
            domCorpState.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpState()));
            domContactNode.appendChild(domCorpState);
            //Corp Country
            QDomElement domCorpCountry = domDoc.createElement("CorpCountry");
            domCorpCountry.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpCountry()));
            domContactNode.appendChild(domCorpCountry);
            //Corp Mail1
            QDomElement domCorpMail1 = domDoc.createElement("CorpMail1");
            domCorpMail1.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpMail1()));
            domContactNode.appendChild(domCorpMail1);
            //Corp Mail2
            QDomElement domCorpMail2 = domDoc.createElement("CorpMail2");
            domCorpMail2.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpMail2()));
            domContactNode.appendChild(domCorpMail2);
            //Corp WebAdress
            QDomElement domCorpWebAdress = domDoc.createElement("CorpWebAdress");
            domCorpWebAdress.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpWebAdress()));
            domContactNode.appendChild(domCorpWebAdress);
            //Corp Phone
            QDomElement domCorpPhone = domDoc.createElement("CorpPhone");
            domCorpPhone.appendChild(domDoc.createTextNode(QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpPhoneNumber())));
            domContactNode.appendChild(domCorpPhone);
            //Corp Fax
            QDomElement domCorpFax = domDoc.createElement("CorpFax");
            domCorpFax.appendChild(domDoc.createTextNode(QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpFaxNumber())));
            domContactNode.appendChild(domCorpFax);
            //Corp Siret
            QDomElement domCorpSiret = domDoc.createElement("CorpSiret");
            domCorpSiret.appendChild(domDoc.createTextNode(QString::number(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpSiretNumber())));
            domContactNode.appendChild(domCorpSiret);
            //Corp TVA
            QDomElement domCorpTVA = domDoc.createElement("CorpTVA");
            domCorpTVA.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpTVAIntra()));
            domContactNode.appendChild(domCorpTVA);
            //Corp PaymentCondition
            QDomElement domCorpPaymentCondition = domDoc.createElement("CorpPaymentCondition");
            domCorpPaymentCondition.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpPaymentCondition()));
            domContactNode.appendChild(domCorpPaymentCondition);
            //Corp Various
            QDomElement domCorpVarious = domDoc.createElement("CorpVarious");
            domCorpVarious.appendChild(domDoc.createTextNode(m_MyPhoneBook.m_pSheetList->at(i)->GetCorpVarious()));
            domContactNode.appendChild(domCorpVarious);
     
            //Ajout Node Contact
            domElementPhoneBookNode.appendChild(domContactNode);
        }
     
        //Ecriture des parametres du fichier XMl ..
        QDomProcessingInstruction domInstructions = domDoc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\"");//encoding=\"ISO-8859-1\"
        //.. en début de fichier
        domDoc.insertBefore(domInstructions, domElementPhoneBookNode);
     
        //Creation du fichier XML avec comme parametres
        QFile fFichierXML(sName);
     
        //Ouverture du fichier
        if(!fFichierXML.open(QFile::WriteOnly))
        {
            return;
        }
     
        //Création d'un objet QTextStream avec comme parametre de sortie le fichier Xml
        QTextStream tsOut(&fFichierXML);
     
        //Ecriture des données du QDomDoc dans le Text Stream avec le parametres d'encodage du fichier et d'indentation (4)
        domDoc.save(tsOut, 4, QDomDocument::EncodingFromTextStream);
     
        //Fermeture du fichier
        fFichierXML.close();
     
        //Message d'informations pour l'utilisateur
        QMessageBox::information(this, tr("Saving the file"), tr("Saved successfully !"));
    }
    Lecture :
    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
    109
    110
    111
    112
    113
    114
    115
    116
    void MyMainWindow::LoadPhoneBookXML()
    {
        //Récupération de l'emplacement et du nom du fichier Xml
        //QString sFilePath = QFileDialog::getOpenFileName(this, tr("Open XML File ..."), "C:/", "XMLFile (*.xml)");
        QString sFilePath = "../Address_Book_Save.xml";
     
        if(sFilePath.isEmpty())//Verif si le fichier est vide
        {
            QMessageBox::critical(this, tr("Open File XML"), tr("Xml file was empty !"));
            return;
        }
     
        QFile fFile(sFilePath);
        if(!fFile.open(QIODevice::ReadOnly | QIODevice::Text))//Verif s'il s'ouvre bien
        {
            QMessageBox::critical(this, tr("File Open"), tr("Failed to open Xml file for reading."));
            return;
        }
     
        QDomDocument domDoc;
        if(!domDoc.setContent(&fFile))//Verif si le contenu est bien transféré au QDomDocument
        {
            QMessageBox::critical(this, tr("Parse Error"), tr("Failed to parse the Xml file into a DOM tree."));
            fFile.close();
            return;
        }
     
        //Une fois le contenu du fichier Xml chargé ds le document QDom, on peux fermer le fichier Xml
        fFile.close();
     
        //Racine du document
        QDomElement PhoneBook = domDoc.documentElement();
        //Premier élément à rechercher
        QDomElement Contact = PhoneBook.firstChildElement("Contact");
     
        //On efface l'ancienne liste de contacts
        m_MyPhoneBook.m_pSheetList->clear();
     
        for(; !Contact.isNull() ; Contact = Contact.nextSiblingElement("Contact"))
        {
            //Création d'un novueau contact
            DataSheet *MySheetContact = new DataSheet();
     
            //Récupération et assignation des valeurs du contact
            MySheetContact->SetContactName(Contact.firstChildElement("ContactName").text());
            MySheetContact->SetContactFirstName(Contact.firstChildElement("ContactFirstName").text());
            MySheetContact->SetContactCivility(Contact.firstChildElement("ContactCivility").text());
            MySheetContact->SetContactFunction(Contact.firstChildElement("ContactFunction").text());
            MySheetContact->SetContactDepartment(Contact.firstChildElement("ContactDepartment").text());
            MySheetContact->SetContactAdress(Contact.firstChildElement("ContactAdress").text());
            MySheetContact->SetContactCity(Contact.firstChildElement("ContactCity").text());
            MySheetContact->SetContactState(Contact.firstChildElement("ContactState").text());
            MySheetContact->SetContactZipCode(Contact.firstChildElement("ContactZipCode").text());
            MySheetContact->SetContactCountry(Contact.firstChildElement("ContactCountry").text());
            MySheetContact->SetContactMail1(Contact.firstChildElement("ContactMail1").text());
            MySheetContact->SetContactMail2(Contact.firstChildElement("ContactMail2").text());
            MySheetContact->SetContactPhoneNumber(Contact.firstChildElement("ContactPhone").text().toInt());
            MySheetContact->SetContactCellPhoneNumber(Contact.firstChildElement("ContactCellPhone").text().toInt());
            MySheetContact->SetContactFaxNumber(Contact.firstChildElement("ContactFax").text().toInt());
            MySheetContact->SetContactOtherPhoneNumber(Contact.firstChildElement("ContactOtherPhone").text().toInt());
            MySheetContact->SetContactVarious(Contact.firstChildElement("ContactVarious").text());
     
            MySheetContact->SetCorpName(Contact.firstChildElement("CorpName").text());
            MySheetContact->SetCorpAdress(Contact.firstChildElement("CorpAdress").text());
            MySheetContact->SetCorpCity(Contact.firstChildElement("CorpCity").text());
            MySheetContact->SetCorpState(Contact.firstChildElement("CorpState").text());
            MySheetContact->SetCorpZipCode(Contact.firstChildElement("CorpZipCode").text());
            MySheetContact->SetCorpCountry(Contact.firstChildElement("CorpCountry").text());
            MySheetContact->SetCorpMail1(Contact.firstChildElement("CorpMail1").text());
            MySheetContact->SetCorpMail2(Contact.firstChildElement("CorpMail2").text());
            MySheetContact->SetCorpWebAdress(Contact.firstChildElement("CorpWebAdress").text());
            MySheetContact->SetCorpPhoneNumber(Contact.firstChildElement("CorpPhone").text().toInt());
            MySheetContact->SetCorpFaxNumber(Contact.firstChildElement("CorpFax").text().toInt());
            MySheetContact->SetCorpOtherPhoneNumber(Contact.firstChildElement("CorpOtherPhone").text().toInt());
            MySheetContact->SetCorpSiretNumber(Contact.firstChildElement("CorpSiret").text().toInt());
            MySheetContact->SetCorpTVAIntra(Contact.firstChildElement("CorpTVA").text());
            MySheetContact->SetCorpPaymentCondition(Contact.firstChildElement("CorpPaymentCondition").text());
            MySheetContact->SetCorpVarious(Contact.firstChildElement("CorpVarious").text());
     
            //Ajout du contact à la liste de contacts
            m_MyPhoneBook.m_pSheetList->push_back(MySheetContact);
        }
     
        //Message d'informations pour l'utilisateur
        QMessageBox::information(this, tr("Loading the file"), tr("Loading successfully !"));
     
    //========Traitement apres lecture du fichier XML pour l'affichage de la liste de contacts ds l'IHM========//
        //Partie ajout des noms des contacts dans la ListView des contacts
        //MAJ de l'affichage des contacts
        m_slExploListContact.clear();
     
        for (int i = 0 ; i < m_MyPhoneBook.m_pSheetList->size() ; ++i)
        {
            m_slExploListContact << (m_MyPhoneBook.m_pSheetList->at(i)->GetContactName() + " " + m_MyPhoneBook.m_pSheetList->at(i)->GetContactFirstName());
        }
     
        m_pExploListModel->setStringList(m_slExploListContact);
        m_pExploListView->setModel(m_pExploListModel);
     
        //Partie ajout des noms d'entreprise dans la ListView des entreprises
        //MAJ de l'affichage des entreprises
        m_slExploListCorp.clear();
     
        for (int i = 0 ; i < m_MyPhoneBook.m_pSheetList->size() ; ++i)
        {
            m_slExploListCorp << (m_MyPhoneBook.m_pSheetList->at(i)->GetCorpName());
        }
     
        //Suppression des doublons
        //m_slExploListCorp.removeDuplicates();
     
        //Attribution de la String List au model
        m_pExploListCorpModel->setStringList(m_slExploListCorp);
        //Attribution du modele à la vue
        m_pExploListCorpView->setModel(m_pExploListCorpModel);
    }
    VOila ^^

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/02/2016, 19h17
  2. Réponses: 1
    Dernier message: 23/02/2012, 12h44
  3. [DOM4J] Problème de lecture de fichier xml avec dom4j
    Par santana2006 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 05/04/2006, 17h52

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