{
xmlpp::Element const * e = dynamic_cast<const xmlpp::Element *> (_node);
if (!e) {
- throw cxml::Error ("missing attribute");
+ throw cxml::Error ("missing attribute " + name);
}
xmlpp::Attribute* a = e->get_attribute (name);
if (!a) {
- throw cxml::Error ("missing attribute");
+ throw cxml::Error ("missing attribute " + name);
}
return a->get_value ();
read_file (file);
}
+cxml::Document::Document ()
+{
+ _parser = new xmlpp::DomParser ();
+}
+
cxml::Document::~Document ()
{
delete _parser;
cxml::Document::read_file (filesystem::path file)
{
if (!filesystem::exists (file)) {
- throw cxml::Error ("XML file does not exist");
+ throw cxml::Error ("XML file " + file.string() + " does not exist");
}
_parser->parse_file (file.string ());
take_root_node ();
}
+void
+cxml::Document::read_string (string s)
+{
+ stringstream t (s);
+ _parser->parse_stream (t);
+ take_root_node ();
+}
+
void
cxml::Document::take_root_node ()
{
}
_node = _parser->get_document()->get_root_node ();
- if (_node->get_name() != _root_name) {
- throw cxml::Error ("unrecognised root node");
+ if (!_root_name.empty() && _node->get_name() != _root_name) {
+ throw cxml::Error ("unrecognised root node " + _node->get_name() + " (expecting " + _root_name + ")");
+ } else if (_root_name.empty ()) {
+ _root_name = _node->get_name ();
}
}