使用rapidxml我想通過一組節點循環,並使用我發現的最好的方法來做到這一點(來自可信任的stackoverflow,文檔似乎沒有一個例子迭代):rapidxml:如何迭代節點?留下最後一個兄弟
while (curNode->next_sibling() !=NULL) {
string shiftLength = curNode->first_attribute("shiftLength")->value();
cout << "Shift Length " << "\t" << shiftLength << endl;
curNode = curNode->next_sibling();
}
不幸的是,在我的OSX 10.6,這是留下了最後兄弟節點 - 我猜是因爲在循環的最後一次迭代,NEXT_SIBLING被調用了兩次。我可以在這最後一個節點得到,如果我寫的,在循環之後:
cout << " LAST IS: " << curNode->first_attribute("shiftLength")->value();
...那是狡猾的,程序退出在該點。
第一個問題:這可能是我的設置(OSX 10.6)的一個獨特的弱點或者我編碼錯了嗎?
第二個問題:有沒有人有他們認爲是使用rapidxml遍歷未知數量的XML節點的正確方法的示例?
謝謝你們
皮特
從不變式的角度考慮循環。您的所有節點都使用非NULL的下一個兄弟節點執行。對於最後一個節點,這不是真的。 – 2011-07-16 00:44:24