2014-11-02 65 views
0

我有一個XML文件,它看起來像這樣TinyXML插入最後位置。

<App> 
    <FileLog> 
     <recording id="1" name="filename1.mp3" date="123467" length="66" /> 
     <recording id="2" name="filename2.mp3" date="123345" length="66" /> 
     <recording id="3" name="filename3.mp3" date="123345" length="66" /> 
    </FileLog> 
</App> 

我試圖使用TinyXML的最後一個記錄元素(一個具有最高ID)後插入另一個記錄元素。

我的代碼是

string xml="C:/logs.xml"; 
TiXmlDocument doc(xml.c_str()); 
if(doc.LoadFile()) 
{ 
    doc.FirstChild("FileLog"); 
    TiXmlElement recording("recording"); 
    recording.SetAttribute("id",4); 
    recording.SetAttribute("name","filenamex.mp3"); 
    recording.SetAttribute("date",436636); 
    recording.SetAttribute("length",34); 
    doc.InsertAfterChild(recording); 
} 
else cout << "error loading file" << endl; 

if(doc.SaveFile(xml.c_str())){ 
    cout << "file saved succesfully.\n"; 

} 
else cout << "error saving file" << endl; 

我沒有得到我想要的輸出。我怎樣才能讓它始終輸入最後一個位置的元素?

回答

1

那麼,基於該文件,文檔的第一個孩子是App,而不是FileLog(您也沒有存儲結果)。像下面這樣的東西應該工作:

if (doc.LoadFile()) { 
    TiXmlHandle docHandle(&doc); 
    TiXmlElement* fileLog = docHandle.FirstChild("App").FirstChild("FileLog").ToElement(); 

    if (fileLog) { 
    TiXmlElement recording("recording"); 

    recording.SetAttribute("id", 4); 
    recording.SetAttribute("name", "filenamex.mp3"); 
    recording.SetAttribute("date", 436636); 
    recording.SetAttribute("length", 34); 

    fileLog->InsertEndChild(recording); 
    } 
} 

注意與TiXmlHandle,你不必擔心孩子的存在之間的節點 - 你只需要檢查在最後。