summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-07-08 22:40:36 +0100
committerCarl Hetherington <cth@carlh.net>2014-07-08 22:40:36 +0100
commit689b1a86d0c4cf4937492f4680457a133df368c6 (patch)
tree1c17ec644538bbcb0fe3b54141e8833a002efff0 /src
parent760ce54a39af82c0f4ea35f836228ce239d5a76d (diff)
Add the ability to find the root node name of some XML.
Diffstat (limited to 'src')
-rw-r--r--src/cxml.cc9
-rw-r--r--src/cxml.h9
2 files changed, 15 insertions, 3 deletions
diff --git a/src/cxml.cc b/src/cxml.cc
index b251ae7..99055ee 100644
--- a/src/cxml.cc
+++ b/src/cxml.cc
@@ -239,6 +239,11 @@ cxml::Document::Document (string root_name, boost::filesystem::path file)
read_file (file);
}
+cxml::Document::Document ()
+{
+ _parser = new xmlpp::DomParser ();
+}
+
cxml::Document::~Document ()
{
delete _parser;
@@ -270,8 +275,10 @@ cxml::Document::take_root_node ()
}
_node = _parser->get_document()->get_root_node ();
- if (_node->get_name() != _root_name) {
+ if (!_root_name.empty() && _node->get_name() != _root_name) {
throw cxml::Error ("unrecognised root node");
+ } else if (_root_name.empty ()) {
+ _root_name = _node->get_name ();
}
}
diff --git a/src/cxml.h b/src/cxml.h
index 0f57b92..a8da82a 100644
--- a/src/cxml.h
+++ b/src/cxml.h
@@ -213,14 +213,19 @@ typedef boost::shared_ptr<const cxml::Node> ConstNodePtr;
class Document : public Node
{
public:
+ Document ();
Document (std::string root_name);
Document (std::string root_name, boost::filesystem::path);
+ virtual ~Document ();
+
void read_file (boost::filesystem::path);
void read_stream (std::istream &);
- virtual ~Document ();
-
+ std::string root_name () const {
+ return _root_name;
+ }
+
private:
void take_root_node ();