2012-06-05 59 views
2

我想從wxGrid中讀取數據並將其寫入XML文件。 該wxGrid是這樣的:TinyXML2和C++

Jahr | Monat
------ | -------------
2012 | 03
2009 | 08


我想擁有什麼:

<SQL> 
    <Datensatz> 
     <Jahr>2012</Jahr> 
     <Monat>03</Monat> 
    </Datensatz> 
    <Datensatz> 
     <Jahr>2009</Jahr> 
     <Monat>08</Monat> 
    </Datensatz> 
</SQL> 


我得到了什麼:

<SQL> 
    <Datensatz> 
     <Jahr>20122009</Jahr> 
     <Monat>0308</Monat> 
    </Datensatz> 
    <Datensatz> 
     <Jahr>20122009</Jahr> 
     <Monat>0308</Monat> 
    </Datensatz> 
</SQL> 


我的代碼:

XMLDocument doc; 
XMLElement* xesql = doc.NewElement("SQL"); 
XMLNode * xnsql = doc.InsertFirstChild(xesql); 
XMLElement* xejahr = doc.NewElement("Jahr"); 
XMLElement* xemonat = doc.NewElement("Monat"); 
XMLText* datensatzJahr = doc.NewText(""); 
XMLText* datensatzMonat = doc.NewText(""); 
for(int i=0; i<=1; i++) 
{ 
    XMLElement* xedatensatz = doc.NewElement("Datensatz"); 
    datensatzJahr = doc.NewText(m_gd_data->GetCellValue(i,0)); 
    datensatzMonat = doc.NewText(m_gd_data->GetCellValue(i,1)); 
    xejahr->InsertEndChild(datensatzJahr); 
    xemonat->InsertEndChild(datensatzMonat); 
    xedatensatz->InsertEndChild(xejahr); 
    xedatensatz->InsertEndChild(xemonat); 
    xesql->InsertEndChild(xedatensatz); 
} 
doc.SaveFile(path); 


我真的不知道在哪裏的問題。誰能幫忙?

+0

如果你一步一步調試它怎麼樣?你應該清楚地看到發生了什麼,因爲你正在爲每個變量獲取值,應該很容易追蹤。 – fduff

+0

也許作爲一般的評論,你應該使用英文變量名稱。對於那些不是德語的讀者/維護者。 –

+0

@AlexandruC。 +1,對於非德語的讀者來說,真的很難讀懂你的代碼(這是對的?)。德國用德語命名變量和功能在德國很普遍嗎? –

回答

4

您沒有爲循環的每次迭代重置XML元素,因此您只將文本附加到現有元素。這應該工作:

XMLDocument doc; 
XMLElement* xesql = doc.NewElement("SQL"); 
XMLNode * xnsql = doc.InsertFirstChild(xesql); 
for(int i=0; i<=1; i++) 
{ 
    XMLElement* xejahr = doc.NewElement("Jahr"); 
    XMLElement* xemonat = doc.NewElement("Monat"); 
    XMLText* datensatzJahr = doc.NewText(""); 
    XMLText* datensatzMonat = doc.NewText(""); 

    XMLElement* xedatensatz = doc.NewElement("Datensatz"); 
    datensatzJahr = doc.NewText(m_gd_data->GetCellValue(i,0)); 
    datensatzMonat = doc.NewText(m_gd_data->GetCellValue(i,1)); 
    xejahr->InsertEndChild(datensatzJahr); 
    xemonat->InsertEndChild(datensatzMonat); 
    xedatensatz->InsertEndChild(xejahr); 
    xedatensatz->InsertEndChild(xemonat); 
    xesql->InsertEndChild(xedatensatz); 
} 
doc.SaveFile(path); 
1

您必須在循環內創建年份和月份的新元素。