Разборка XML выглядит так (без контроля ошибок)
C++ (Qt)
wxXmlDocument xmlDoc;
xmlDoc.Load(fn);
wxXmlNode * root = xmlDoc.GetRoot()
const wxXmlNode * child = LookChild(root, "info");
while (child) {
if (child->GetName() == _T("icon")) {
wxString size = child->GetPropVal(_T("size"), _T("32"));
,,,
child = child->GetNext();
С наследованием мрачно поскольку GetName, GetPropVal никакие не виртуал. Template вроде можно но придется заряжать <class T1, class T2, class T3 ..> и, возможно, понять будет сложновато. Также я обязан полностью повторить логику которая мне не всегда нравится (напр хотелось бы пройтись по контейнеру чилдренов вместо while/GetNext).
А главное - если новый формат хоть чуть-чуть изменится (и его дерево уже не будет соответствовать дереву XML) - у меня будут большие проблемы с моей "общей" конструкцией. Поэтому просто скопировал и заменил вызовы парсера. Тоже не блеск (так я имею 2 однотипных куска)