+bool mp_xml::get_bool(const xmlNode *ptr, bool default_value)
+{
+ if (ptr && ptr->type != XML_TEXT_NODE)
+ ptr = ptr->children;
+ if (ptr && ptr->type == XML_TEXT_NODE && ptr->content)
+ {
+ if (!strcmp((const char *) ptr->content, "true")
+ || !strcmp((const char *) ptr->content, "1"))
+ return true;
+ else
+ return false;
+ }
+ return default_value;
+}
+
+int mp_xml::get_int(const xmlNode *ptr, int default_value)
+{
+ if (ptr && ptr->type != XML_TEXT_NODE)
+ ptr = ptr->children;
+ if (ptr && ptr->type == XML_TEXT_NODE && ptr->content)
+ {
+ return atoi((const char *) ptr->content);
+ }
+ return default_value;
+}
+
+bool mp_xml::check_attribute(const _xmlAttr *ptr,
+ const std::string &ns,
+ const std::string &name)
+{
+
+ if (!mp::xml::is_attribute(ptr, ns, name))
+ {
+ std::string got_attr = "'";
+ if (ptr && ptr->name)
+ got_attr += std::string((const char *)ptr->name);
+ if (ns.size() && ptr && ptr->ns && ptr->ns->href){
+ got_attr += " ";
+ got_attr += std::string((const char *)ptr->ns->href);
+ }
+ got_attr += "'";
+
+ throw mp::XMLError("Expected XML attribute '" + name
+ + " " + ns + "'"
+ + ", not " + got_attr);
+ }
+ return true;
+}