2012-08-27 15 views
7

Utilizzo di TinyXML per leggere un file xml. Voglio eseguire il loop su più elementi, ma per qualche motivo si circola solo sul primo elemento. Un file xml breve esempio potrebbe essere:TinyXML looping su elementi

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

Il codice per ciclo è:

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

} 

Quindi questo loop solo una volta e wmName Mostrano WaveManager01, ma poi il ciclo for esiste.

+1

Bah, NVM. Vedo che ho bisogno di e-> NextSiblingElement() non root-> NextSiblingElement(). Odio quando trovo la risposta subito dopo la pubblicazione. – user441521

+11

Post che come risposta, non un commento. –

+0

@ user441521, scrivilo come risposta e contrassegnalo come accettato in modo che questa domanda non sia più nella sezione senza risposta. Grazie :) –

risposta

2

L'istruzione for reimposta l'elemento e a root su ogni iterazione. Si suppone di andare al prossimo elemento in elenco - e.

Ecco il codice corretto:

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

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

}