return content;
}
-cxml::File::File (string file, string root_name)
+cxml::Document::Document (string root_name)
+ : _root_name (root_name)
+{
+ _parser = new xmlpp::DomParser;
+}
+
+cxml::Document::~Document ()
+{
+ delete _parser;
+}
+
+void
+cxml::Document::read_file (filesystem::path file)
{
if (!filesystem::exists (file)) {
throw cxml::Error ("XML file does not exist");
}
- _parser = new xmlpp::DomParser;
- _parser->parse_file (file);
+ _parser->parse_file (file.string ());
+ take_root_node ();
+}
+
+void
+cxml::Document::read_stream (istream& stream)
+{
+ _parser->parse_stream (stream);
+ take_root_node ();
+}
+
+void
+cxml::Document::take_root_node ()
+{
if (!_parser) {
throw cxml::Error ("could not parse XML");
}
_node = _parser->get_document()->get_root_node ();
- if (_node->get_name() != root_name) {
+ if (_node->get_name() != _root_name) {
throw cxml::Error ("unrecognised root node");
}
}
-cxml::File::~File ()
-{
- delete _parser;
-}
BOOST_AUTO_TEST_CASE (test)
{
- cxml::File file ("test/ref/a.xml", "A");
+ cxml::Document document ("A");
+ document.read_file ("test/ref/a.xml");
- BOOST_CHECK_EQUAL (file.string_child("B"), "42");
- BOOST_CHECK_EQUAL (file.number_child<int>("B"), 42);
- BOOST_CHECK_EQUAL (file.number_child<float>("B"), 42);
- BOOST_CHECK_EQUAL (file.string_child("C"), "fred");
- BOOST_CHECK_EQUAL (file.number_child<double>("D"), 42.9);
- BOOST_CHECK_EQUAL (file.string_child("E"), "yes");
- BOOST_CHECK_EQUAL (file.bool_child("E"), true);
- BOOST_CHECK_THROW (file.bool_child("F"), cxml::Error);
+ BOOST_CHECK_EQUAL (document.string_child("B"), "42");
+ BOOST_CHECK_EQUAL (document.number_child<int>("B"), 42);
+ BOOST_CHECK_EQUAL (document.number_child<float>("B"), 42);
+ BOOST_CHECK_EQUAL (document.string_child("C"), "fred");
+ BOOST_CHECK_EQUAL (document.number_child<double>("D"), 42.9);
+ BOOST_CHECK_EQUAL (document.string_child("E"), "yes");
+ BOOST_CHECK_EQUAL (document.bool_child("E"), true);
+ BOOST_CHECK_THROW (document.bool_child("F"), cxml::Error);
- BOOST_CHECK (file.optional_string_child("B"));
- BOOST_CHECK_EQUAL (file.optional_string_child("B").get(), "42");
- BOOST_CHECK (file.optional_number_child<int>("B"));
- BOOST_CHECK_EQUAL (file.optional_number_child<int>("B").get(), 42);
- BOOST_CHECK (file.optional_number_child<float>("B"));
- BOOST_CHECK_EQUAL (file.optional_number_child<float>("B").get(), 42);
- BOOST_CHECK (file.optional_string_child("C"));
- BOOST_CHECK_EQUAL (file.optional_string_child("C").get(), "fred");
- BOOST_CHECK (file.optional_number_child<double>("D"));
- BOOST_CHECK_EQUAL (file.optional_number_child<double>("D").get(), 42.9);
- BOOST_CHECK (file.optional_string_child("E"));
- BOOST_CHECK_EQUAL (file.optional_string_child("E").get(), "yes");
- BOOST_CHECK (file.optional_bool_child("E"));
- BOOST_CHECK_EQUAL (file.optional_bool_child("E").get(), true);
- BOOST_CHECK_THROW (file.optional_bool_child("F"), cxml::Error);
- BOOST_CHECK (!file.optional_bool_child("G"));
+ BOOST_CHECK (document.optional_string_child("B"));
+ BOOST_CHECK_EQUAL (document.optional_string_child("B").get(), "42");
+ BOOST_CHECK (document.optional_number_child<int>("B"));
+ BOOST_CHECK_EQUAL (document.optional_number_child<int>("B").get(), 42);
+ BOOST_CHECK (document.optional_number_child<float>("B"));
+ BOOST_CHECK_EQUAL (document.optional_number_child<float>("B").get(), 42);
+ BOOST_CHECK (document.optional_string_child("C"));
+ BOOST_CHECK_EQUAL (document.optional_string_child("C").get(), "fred");
+ BOOST_CHECK (document.optional_number_child<double>("D"));
+ BOOST_CHECK_EQUAL (document.optional_number_child<double>("D").get(), 42.9);
+ BOOST_CHECK (document.optional_string_child("E"));
+ BOOST_CHECK_EQUAL (document.optional_string_child("E").get(), "yes");
+ BOOST_CHECK (document.optional_bool_child("E"));
+ BOOST_CHECK_EQUAL (document.optional_bool_child("E").get(), true);
+ BOOST_CHECK_THROW (document.optional_bool_child("F"), cxml::Error);
+ BOOST_CHECK (!document.optional_bool_child("G"));
}