2010-11-11 4 views
0

Я использую tinyxml для сохранения ввода данных пользователем в консольной программе C++. Я прохожу функцию сохранения массива структур, которые выглядят как следующийtinyxml и C++ для сохранения данных

struct day 
{ 
     string name; 
     string note; 
}; 

У меня есть семь из них, и передать все семь к функции сохранения, которая выглядит следующим образом

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"; 
} 

Он пишет об этом в файл

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

Что мне нужно это

<?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> 

Я не могу понять, как создавать новые элементы тега дня. Заранее благодарю за любую помощь.

ответ

1

Я раньше не использовал TinyXml, но, глядя на структуру кода, вам нужно создать элемент дня внутри вашего цикла for и добавить его в элемент недели 7 раз - один раз для каждого дня.

Ваш текущий код только добавляет элемент дня в элемент недели один раз в конце - это отражается на вашем выходе xml.

Принимая во внимание ваш код - возможно, что-то похожее на это ниже. (Это может не компилироваться или быть точным, но должно обеспечить правильную идею).

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

Я получил его. Я изучаю, как использовать tinyxml и должен был видеть это (настоящий момент). Большое вам спасибо за помощь. Это не позволяет мне опубликовать другой ответ. Но спасибо! – 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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^