2012-08-27 18 views
7

Używanie TinyXML do odczytania pliku xml. Chcę zapętlić wiele elementów, ale z jakiegoś powodu pętle są tylko nad pierwszym elementem. Krótki przykład plik xml byłoby:Pętla TinyXML nad elementami

<root> 
    <wave_manager name="WaveManager01"> 
    </wave_manager> 
    <wave_manager name="WaveManager02"> 
    </wave_manager> 
</root> 

Kod dla pętli:

TiXmlElement* root = _waveDoc.FirstChildElement("root"); 
for(TiXmlElement* e = root->FirstChildElement("wave_manager"); e != NULL; e = root->NextSiblingElement("wave_manager")) 
{ 
    string wmName = e->Attribute("name"); 

} 

Więc to tylko pętle raz wmName ma pokazać WaveManager01, ale wtedy do pętli istnieje.

+1

Bah, NVM. Widzę, że potrzebuję e-> NextSiblingElement() nie root-> NextSiblingElement(). Nienawidzę, gdy znajdę odpowiedź zaraz po tym, jak opublikuję. – user441521

+11

Napisz to jako odpowiedź, a nie komentarz. –

+0

@ user441521, proszę napisać to jako odpowiedź i oznaczyć ją jako zaakceptowaną, aby pytanie to nie było już w sekcji bez odpowiedzi. Dzięki :) –

Odpowiedz

2

Instrukcja for resetuje element e do katalogu głównego w każdej iteracji. Ma przejść do następnego elementu na liście - e.

Oto prawidłowy kod:

TiXmlElement* root = _waveDoc.FirstChildElement("root"); 

for(TiXmlElement* e = root->FirstChildElement("wave_manager"); e != NULL; e = e->NextSiblingElement("wave_manager")) 
{ 
    string wmName = e->Attribute("name"); 

} 
Powiązane problemy