XML parsing program in C++
I will only comment about the following not-fully-implemented part.

 for (auto&amp; kv : tagMap) {
     if (kv.first == "id") {
     std::string var = eb.second.child_value(kv.second.c_str());
     // Do work on returned value of id tag in the future (I.e validation)
     std::cout &lt;&lt; var &lt;&lt; endl;
     }
     if (kv.first == "description") {
     std::string var = eb.second.child_value(kv.second.c_str());
     // Do work on returned value of content tag in the future
     std::cout &lt;&lt; var &lt;&lt; endl;
     }
     if (kv.first == "url") {
     std::string var = eb.second.child_value(kv.second.c_str());
     // Do work on returned value of web_address tag in the future
     std::cout &lt;&lt; var &lt;&lt; endl;
     }
 }


Even without much code filling the blanks, it seems that you want to have some associative tag =&gt; function data. In which case, you could create an std::unordered_map with strings as keys and associating function pointers to them, generated from captureless lambdas. A small example:

std::unordered_map&lt;std::string, void(*)(const std::string&amp;)&gt; tasks = {
    { "id", [](const std::string&amp; val) {
        // Do work on returned value of id tag
    }},
    { "description", [](const std::string&amp; val) {
        // Do work on returned value of content tag
    }},
    { "url", [](const std::string&amp; val) {
        // Do work on returned value of web_address tag
    }}
};

for (auto&amp; kv: tagMap) {
    auto it = tasks.find(kv.first);
    if (it != tasks.end()) {
        it-&gt;second(eb.second.child_value(kv.second.c_str()));
    }
}


That way, your code is easy to extend to other tags by representing tasks associated to tags as data and storing them into a map. Now, it will only work if you don't need captures, otherwise, you may have to use std::function or some more heavyweight mechanism instead of a big chain of if.