2012-08-27 6 views
7

Usando TinyXML para leer un archivo xml. Quiero pasar por varios elementos, pero por alguna razón solo gira sobre el primer elemento. Un archivo XML breve ejemplo sería:TinyXML iterando los elementos

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

El código de bucle es:

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

} 

Así que esto solo los bucles de una vez wmName qué durante WaveManager01, pero entonces el bucle for existe.

+1

Bah, NVM. Veo que necesito e-> NextSiblingElement() no root-> NextSiblingElement(). Odio cuando encuentro la respuesta justo después de publicar. – user441521

+11

Publique eso como una respuesta, no como un comentario. –

+0

@ user441521, escríbalo como respuesta y márcalo como aceptado para que esta pregunta ya no esté en la sección sin respuesta. Gracias :) –

Respuesta

2

Su declaración for está restableciendo el elemento e para rootear en cada iteración. Se supone que debe pasar al siguiente elemento de la lista: e.

Aquí es el código correcto:

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

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

} 
Cuestiones relacionadas