2010-11-11 24 views
0

J'utilise tinyxml pour sauvegarder les données saisies par l'utilisateur dans un programme de console C++. Je passe une fonction d'économie d'un tableau de struct qui ressemblent à ce qui suittinyxml et C++ pour sauvegarder les données

struct day 
{ 
     string name; 
     string note; 
}; 

J'ai sept d'entre eux, et passer tous les sept à la fonction de sauvegarde qui ressemble à ce qui suit

void saveData(day dayArr[]) 
{ 
    TiXmlDeclaration* declaration = new TiXmlDeclaration("1.0", "UTF-8", "no");//Create DTD 
    TiXmlDocument* doc = new TiXmlDocument; 
    doc->LinkEndChild(declaration); 

    TiXmlElement* week = new TiXmlElement("week"); 
    TiXmlElement* day = new TiXmlElement("day"); 
    TiXmlElement* name = new TiXmlElement("name"); 
    TiXmlElement* note = new TiXmlElement("note"); 
    TiXmlElement* tl = new TiXmlElement("tl"); 
    TiXmlElement* ti = new TiXmlElement("ti"); 
    TiXmlText* dayName = new TiXmlText(""); 
    TiXmlText* dayNote = new TiXmlText(""); 

    for(int i=0; i<7; i++) 
    { 
     dayName = new TiXmlText(dayArr[i].name.c_str()); 
     dayNote = new TiXmlText(dayArr[i].note.c_str()); 
     name->LinkEndChild(dayName); 
     note->LinkEndChild(dayNote); 
     day->LinkEndChild(name); 
     day->LinkEndChild(note); 
    } 

    week->LinkEndChild(day); 
    doc->LinkEndChild(week); 

    doc->SaveFile("test.xml"); 
    cout << "SAVED"; 
} 

Il écrit cette au fichier

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<week> 
    <day> 
     <name>SundayMondayTuesdayWednesdayThursdayFridaySaturday 
     </name> 
     <note> 
     </note> 
    </day> 
</week> 

ce que je besoin est ce

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<week> 
    <day> 
     <name>Sunday</name> 
     <note>  </note> 
    </day> 
<day> 
     <name>Monday</name> 
     <note> 
     </note> 
    </day> 
<day> 
     <name>Tuesday</name> 
     <note>  </note> 
    </day> 
<day> 
     <name>Wednesday</name> 
     <note>  </note> 
    </day> 
<day> 
     <name>Thursday</name> 
     <note>  </note> 
    </day> 
<day> 
     <name>Friday</name> 
     <note>  </note> 
    </day> 
<day> 
     <name>Saturday</name> 
     <note>  </note> 
    </day> 
</week> 

Je n'arrive pas à comprendre comment créer de nouveaux éléments de l'étiquette de jour. Merci d'avance pour votre aide.

Répondre

1

Je n'avais pas utilisé TinyXml avant mais en regardant la structure du code, vous devez créer l'élément day dans votre boucle for et l'ajouter à l'élément week 7 fois - une fois par jour. Votre code actuel ajoute une fois l'élément de jour à l'élément de semaine une fois à la fin - ceci est reflété dans votre sortie de xml. Prendre une partie de votre code - peut-être quelque chose de similaire à celui-ci ci-dessous. (Cela peut ne pas compiler ou être exactement correct mais devrait fournir la bonne idée).

TiXmlElement* week = new TiXmlElement("week"); 
TiXmlElement* name = new TiXmlElement("name"); 
TiXmlElement* note = new TiXmlElement("note"); 
TiXmlElement* tl = new TiXmlElement("tl"); 
TiXmlElement* ti = new TiXmlElement("ti"); 
TiXmlText* dayName = new TiXmlText(""); 
TiXmlText* dayNote = new TiXmlText(""); 

for(int i=0; i<7; i++) 
{ 
    TiXmlElement* day = new TiXmlElement("day"); 
    dayName = new TiXmlText(dayArr[i].name.c_str()); 
    dayNote = new TiXmlText(dayArr[i].note.c_str()); 
    name->LinkEndChild(dayName); 
    note->LinkEndChild(dayNote); 
    day->LinkEndChild(name); 
    day->LinkEndChild(note); 
    week->LinkEndChild(day); 
} 

doc->LinkEndChild(week); 
+0

Je l'ai. J'apprends à utiliser tinyxml et j'aurais dû voir ça (un vrai moment d'oh) Merci beaucoup pour l'aide. Il ne me laisse pas poster une autre réponse. Mais merci! – Bear

0
void saveData(std::vector<day*> vecDay) 
{ 
    TiXmlDeclaration* declaration = new TiXmlDeclaration("1.0", "UTF-8", "no");//Create DTD 
    TiXmlDocument* doc = new TiXmlDocument; 
    doc->LinkEndChild(declaration); 

    TiXmlElement* week = new TiXmlElement("week"); 

    for(std::vector<day*>::iterator it = vecDay.begin(); it != vecDay.end(); it++) 
    { 
     TiXmlElement* day_ = new TiXmlElement("day"); 
     TiXmlElement* name = new TiXmlElement("name"); 
     TiXmlElement* note = new TiXmlElement("note"); 
     TiXmlElement* tl = new TiXmlElement("tl"); 
     TiXmlElement* ti = new TiXmlElement("ti"); 
     TiXmlText* dayName = new TiXmlText(""); 
     TiXmlText* dayNote = new TiXmlText(""); 
     dayName = new TiXmlText((*it)->name.c_str()); 
     dayNote = new TiXmlText((*it)->note.c_str()); 
     name->LinkEndChild(dayName); 
     note->LinkEndChild(dayNote); 
     day_->LinkEndChild(name); 
     day_->LinkEndChild(note); 
     week->LinkEndChild(day_); 
    } 

    doc->LinkEndChild(week); 

    doc->SaveFile("test2.xml"); 
    cout << "SAVED" << endl; 
}