2010-10-09 154 views
3

爲什麼這個循環只運行一次? noteDatabaseItem只需要一個節點並填充數據。 xml裏面有3個註釋。爲什麼這個循環只運行一次?

XML:

<?xml version="1.0" encoding="utf-8"?> 
<noteCollection> 
    <note name="Test Note 1">This is test note 1 content!</note> 
    <note name="Test Note 2">This is test note 2 content!</note> 
    <note name="Test Note 3">This is test note 3 content!</note> 
</noteCollection> 

C++:

std::vector<notekeeper::noteDatabaseItem> noteList; 
TiXmlElement* noteCollection = xmlDoc->FirstChildElement("noteCollection"); 
TiXmlElement* node = noteCollection->FirstChildElement("note"); 
int itemCount = 0; 

while (node != NULL) { 
    itemCount++; 
    noteList.resize(itemCount); 
    noteList.push_back(noteDatabaseItem(node)); 
    node = noteCollection->NextSiblingElement("note"); 
} 
+4

爲什麼在'push_back'之前'調整大小'?它調整自己。也許最後一行應該是'node = note-> NextSiblingElement(「note」);'? – GManNickG 2010-10-09 22:09:14

+0

加載的XML是上面的,有3個音符,所以沒有1,調整大小是一個錯誤,謝謝。 – Will03uk 2010-10-09 22:10:57

+0

node = node-> NextSiblingElement(「note」);工作。 – Will03uk 2010-10-09 22:13:41

回答

9

不是應該node = node->NextSiblingElement("note")

noteCollection只有孩子,不是兄弟姐妹,對不對?

3

您的循環中出現錯誤的元素。試試這個:

while (node != NULL) { 
    itemCount++; 
    noteList.push_back(noteDatabaseItem(node)); 
    node = node->NextSiblingElement("note"); 
} 

當前節點的下一個兄弟是你想要的。您試圖獲取父節點的下一個兄弟節點。

1
node = noteCollection->NextSiblingElement("note"); 

,就是要

node = node->NextSiblingElement("note"); 

愚蠢的錯誤。兄弟姐妹不是孩子。

+2

你應該接受GoTo的答案,而不是重新發布它。 (即,刪除該答案)。 – GManNickG 2010-10-09 22:17:13