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)
Le code de 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 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();
(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.
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 :/
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; }
Merci d'avance pour vos réponses
Partager