bool Config::parseNode(const pugi::xml_node& node) { UnicodeString currentPath = StringConverter::fromUtf8(node.path('/')); currentPath.append("@"); pugi::xml_node::attribute_iterator attrIter = node.attributes_begin(); pugi::xml_node::attribute_iterator attrEnd = node.attributes_end(); for (; attrIter != attrEnd; ++attrIter) { UnicodeString configKey = currentPath; configKey.append(attrIter->name()); std::map<UnicodeString, Variable>::iterator itm = variablesMap_.find(configKey); if (itm != variablesMap_.end()) { if (!itm->second.parse(attrIter->value())) { return false; } } else { LOG_WARN << "Ignoring unknown config value " << configKey << std::endl; } } pugi::xml_node::iterator nodeIter = node.begin(); pugi::xml_node::iterator nodeEnd = node.end(); for (; nodeIter != nodeEnd; ++nodeIter) { if (nodeIter->type() == pugi::node_element) { if (!parseNode(*nodeIter)) { return false; } } } return true; }