2012-08-27 103 views
7

使用TinyXML读取xml文件。我想循环多个元素,但由于某种原因,它只能遍历第一个元素。一个简短的示例XML文件将是:TinyXML循环元素

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

代码循环是:

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

} 

所以这只是一次循环和wmName确实显示WaveManager01,但随后的for循环存在。

+1

呸,NVM。我看到我需要e-> NextSiblingElement()而不是root-> NextSiblingElement()。当我在发布后立即找到答案时,讨厌。 – user441521

+11

发布该答案,而不是评论。 –

+0

@ user441521,请将其写为答案并将其标记为已接受,以便此问题不再处于未答复部分。谢谢 :) –

回答

2

您的for语句会将每个迭代中的e元素重置为root。它应该去列表中的下一个元素 - e

下面是正确的代码:

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

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

}