有沒有人有代碼遍歷TinyXML中的一個子樹的節點? IE:鑑於父母,遍歷所有的孩子和所有孩子的孩子?TinyXML遍歷子樹
4
A
回答
4
Begemoth的回答對我來說聽起來很不錯。
這裏是TiXmlElement的accept()方法,不使用訪問者的簡化版本,而是需要一個TiXmlNode *作爲參數:
void TiXmlIterator::iterate(const TiXmlNode* el)
{
cout << "Iterating Node " << el->Value() << endl;
// More useful code here...
for (const TiXmlNode* node=el->FirstChild(); node; node=node->NextSibling())
{
iterate(node);
}
// And/Or here.
}
的accept()方法需要一個TiXmlVisitor作爲參數,併爲你做所有的迭代,但。而且您不必在整個文檔中調用它,只需要遍歷子樹的根節點即可。這樣,您可以通過重寫正確的方法來爲TiXmlNode的子類定義特定的行爲。在TinyXml's source code中查看TiXmlPrinter的實現是一個很好的例子。
如果你不想這樣做,這裏是另一個例子:
bool MyTiXmlVisitor::Visit(const TiXmlText& text)
{
cout << "Visiting Text: " << text.Value() << endl;
return true; // This will ensure it keeps iterating
}
這將作用於你調用accept()上的節點的子樹的所有文本元素。要採取行動全部的元素,請覆蓋TiXmlVisitor的其餘虛擬方法。然後,要遍歷樹的代碼,請執行下列操作:
subtree_root_node->Accept(my_tixmlvisitor_object);
2
您可以在庫中使用訪問者模式實現。創建一個從TiXmlVistor繼承的類,重寫必要的方法(如VisitElement),然後調用特定節點的Accept()方法。
+0
不太什麼我問了 – Raindog 2010-10-14 02:59:15
相關問題
- 1. 遍歷樹遍歷
- 2. lisp樹遍歷
- 3. GWT樹遍歷
- 4. 遍歷DOM樹
- 5. 遍歷樹枝
- 6. OCaml - 遍歷樹
- 7. 遍歷樹LISP
- 8. 樹的遍歷
- 9. 樹遍歷python
- 10. InOrder樹遍歷
- 11. Xquery遍歷樹
- 12. SQL樹遍歷
- 13. DOM樹遍歷
- 14. avl樹遍歷
- 15. 現實世界前/後階遍歷樹遍歷的例子
- 16. 在C中自動遍歷樹遍歷#
- 17. Rust與遍歷Checker的樹遍歷
- 18. 對樹的遍歷
- 19. 遍歷樹 - 分步
- 20. 二叉樹遍歷
- 21. 遍歷樹向上
- 22. 二叉樹遍歷
- 23. Prolog的樹遍歷
- 24. 遍歷二叉樹
- 25. 遍歷矢量樹
- 26. 遍歷二叉樹
- 27. 樹遍歷混淆?
- 28. 遍歷數組樹?
- 29. 樹遍歷遞歸
- 30. 在樹中遍歷
尋找實際的代碼。 – Raindog 2010-12-08 08:26:43
TiXmlPrinter代碼應該是一個很好的開始。你有什麼特別想在每個節點上做的事情? – brak3000 2010-12-08 14:49:35
好的,編輯我的答案以指定我和(我認爲)Begemoth的意思。 HTH。 – brak3000 2010-12-08 19:34:01