+int mp_xml::get_int(const xmlNode *ptr, int default_value)
+{
+ 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;
+}
+
+bool mp_xml::is_attribute(const _xmlAttr *ptr,
+ const std::string &ns,
+ const std::string &name)
+{
+ if (0 != xmlStrcmp(BAD_CAST name.c_str(), ptr->name))
+ return false;
+
+ if (ns.size()
+ && (!ptr->ns || !ptr->ns->href
+ || 0 != xmlStrcmp(BAD_CAST ns.c_str(), ptr->ns->href)))
+ return false;
+
+ return true;
+}
+
+