2012-08-27 50 views
7

Sử dụng TinyXML để đọc tệp xml. Tôi muốn lặp qua nhiều phần tử nhưng vì một số lý do nó chỉ lặp lại trên phần tử đầu tiên. Một tập tin xml dụ ngắn sẽ là:Lặp qua TinyXML qua các phần tử

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

Mã để lặp là:

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

} 

Vì vậy, đây chỉ vòng một lần và wmName không hiển thị WaveManager01, nhưng sau đó vòng lặp for tồn tại.

+1

Bah, nvm. Tôi thấy tôi cần e-> NextSiblingElement() không phải root-> NextSiblingElement(). Ghét khi tôi tìm thấy câu trả lời ngay sau khi tôi đăng. – user441521

+11

Đăng câu trả lời đó chứ không phải là nhận xét. –

+0

@ user441521, vui lòng viết câu trả lời và đánh dấu câu trả lời là được chấp nhận để câu hỏi này không còn trong phần chưa được trả lời. Cảm ơn :) –

Trả lời

2

Câu lệnh for của bạn đang đặt lại thành phần e thành gốc trên mỗi lần lặp lại. Nó được cho là đi đến phần tử tiếp theo trong danh sách - e.

Đây là mã đúng:

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

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

} 
Các vấn đề liên quan