X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fcxml.cc;h=3248324bb8b8c6e69e0e9d864182e508e4f02145;hb=220ba2521fde0692063f384bf92d178940f3c793;hp=2aad081d346bd4bc56e008864501b1c2e9348880;hpb=ba540d35f8bf3557d5f3b0c55f7699563201e9b7;p=libcxml.git diff --git a/src/cxml.cc b/src/cxml.cc index 2aad081..3248324 100644 --- a/src/cxml.cc +++ b/src/cxml.cc @@ -1,31 +1,32 @@ /* - Copyright (C) 2012-2014 Carl Hetherington + Copyright (C) 2012-2016 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of libcxml. + + libcxml is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + libcxml is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with libcxml. If not, see . */ -#include -#include #include #include #include #include "cxml.h" -using namespace std; -using namespace boost; +using std::string; +using std::list; +using boost::shared_ptr; +using boost::optional; cxml::Node::Node () : _node (0) @@ -55,7 +56,7 @@ cxml::Node::node_child (string name) const } else if (n.empty ()) { throw cxml::Error ("missing XML tag " + name + " in " + _node->get_name()); } - + return n.front (); } @@ -68,7 +69,7 @@ cxml::Node::optional_node_child (string name) const } else if (n.empty ()) { return shared_ptr (); } - + return n.front (); } @@ -80,14 +81,14 @@ cxml::Node::node_children (string name) const */ xmlpp::Node::NodeList c = _node->get_children (); - + list > n; for (xmlpp::Node::NodeList::iterator i = c.begin (); i != c.end(); ++i) { if ((*i)->get_name() == name) { n.push_back (shared_ptr (new Node (*i))); } } - + _taken.push_back (name); return n; } @@ -117,7 +118,7 @@ bool cxml::Node::bool_child (string c) const { string const s = string_child (c); - return (s == "1" || s == "yes"); + return (s == "1" || s == "yes" || s == "True"); } optional @@ -127,8 +128,8 @@ cxml::Node::optional_bool_child (string c) const if (!s) { return optional (); } - - return (s.get() == "1" || s.get() == "yes"); + + return (s.get() == "1" || s.get() == "yes" || s.get() == "True"); } void @@ -142,12 +143,12 @@ cxml::Node::string_attribute (string name) const { xmlpp::Element const * e = dynamic_cast (_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 (); @@ -160,7 +161,7 @@ cxml::Node::optional_string_attribute (string name) const if (!e) { return optional (); } - + xmlpp::Attribute* a = e->get_attribute (name); if (!a) { return optional (); @@ -202,7 +203,7 @@ string cxml::Node::content () const { string content; - + xmlpp::Node::NodeList c = _node->get_children (); for (xmlpp::Node::NodeList::const_iterator i = c.begin(); i != c.end(); ++i) { xmlpp::ContentNode const * v = dynamic_cast (*i); @@ -250,28 +251,20 @@ cxml::Document::~Document () } void -cxml::Document::read_file (filesystem::path file) +cxml::Document::read_file (boost::filesystem::path file) { - if (!filesystem::exists (file)) { + if (!boost::filesystem::exists (file)) { throw cxml::Error ("XML file " + file.string() + " does not exist"); } - - _parser->parse_file (file.string ()); - take_root_node (); -} -void -cxml::Document::read_stream (istream& stream) -{ - _parser->parse_stream (stream); + _parser->parse_file (file.string ()); take_root_node (); } void cxml::Document::read_string (string s) { - stringstream t (s); - _parser->parse_stream (t); + _parser->parse_memory (s); take_root_node (); } @@ -284,9 +277,8 @@ cxml::Document::take_root_node () _node = _parser->get_document()->get_root_node (); if (!_root_name.empty() && _node->get_name() != _root_name) { - throw cxml::Error ("unrecognised root node"); + throw cxml::Error ("unrecognised root node " + _node->get_name() + " (expecting " + _root_name + ")"); } else if (_root_name.empty ()) { _root_name = _node->get_name (); } } -