2010-10-09 22 views
3

Pourquoi cette boucle ne s'exécute-t-elle qu'une seule fois? noteDatabaseItem prend juste un noeud et remplit les données. le xml a 3 notes dedans.Pourquoi cette boucle ne s'exécute-t-elle qu'une seule fois?

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

Pourquoi "redimensionnez-vous" avant de "push_back"? Il se redimensionne. Peut-être que la dernière ligne devrait être 'node = note-> NextSiblingElement (" note ");'? – GManNickG

+0

Le XML chargé est au dessus et il y a 3 notes donc il n'y en a pas 1, et le redimensionnement est une erreur merci. – Will03uk

+0

node = node-> NextSiblingElement ("note"); travaillé. – Will03uk

Répondre

9

ne devrait-il être node = node->NextSiblingElement("note")?

noteCollection a seulement des enfants, pas des frères et sœurs, non?

3

Vous obtenez le mauvais élément dans votre boucle. Essayez ceci:

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

Le frère suivant du nœud actuel est celui que vous voulez. Vous essayiez d'obtenir le prochain frère du nœud parent.

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

est censé être

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

erreur stupide. Frère et soeur pas enfant.

+2

Vous devez accepter la réponse de GoTo, ne pas le re-poster. (c'est-à-dire, supprimez cette réponse.) – GManNickG