X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fcxml.h;h=eea15f5eb3f3cf4872c6e6d507c9fe048109195a;hb=89939e2862b61eedb4ababb22d3ae17fae179de8;hp=8a7a82cb266b72089fd412a452e6713d0ea6be76;hpb=fea74301948e42bb5fd2853ed84a68a4fb86bbc7;p=libcxml.git diff --git a/src/cxml.h b/src/cxml.h index 8a7a82c..eea15f5 100644 --- a/src/cxml.h +++ b/src/cxml.h @@ -1,3 +1,22 @@ +/* + Copyright (C) 2012-2014 Carl Hetherington + + This program 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, + 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. + +*/ + #ifndef LIBCXML_CXML_H #define LIBCXML_CXML_H @@ -6,7 +25,7 @@ #include #include #include -#include +#include #include #include @@ -51,7 +70,7 @@ public: * not destroy the xmlpp::Node. * @param node xmlpp::Node. */ - Node (xmlpp::Node const * node); + Node (xmlpp::Node* node); std::string name () const; @@ -88,7 +107,12 @@ public: { std::string s = string_child (c); boost::erase_all (s, " "); - return boost::lexical_cast (s); + std::stringstream t; + t.imbue (std::locale::classic ()); + t << s; + T n; + t >> n; + return n; } template @@ -101,7 +125,12 @@ public: std::string t = s.get (); boost::erase_all (t, " "); - return boost::optional (boost::lexical_cast (t)); + std::stringstream u; + u.imbue (std::locale::classic ()); + u << t; + T n; + u >> n; + return n; } /** This will mark a child as to be ignored when calling done() */ @@ -127,7 +156,12 @@ public: { std::string s = string_attribute (c); boost::erase_all (s, " "); - return boost::lexical_cast (s); + std::stringstream t; + t.imbue (std::locale::classic ()); + t << s; + T n; + t >> n; + return n; } template @@ -140,12 +174,20 @@ public: std::string t = s.get (); boost::erase_all (t, " "); - return boost::optional (boost::lexical_cast (t)); + std::stringstream u; + u.imbue (std::locale::classic ()); + u << t; + T n; + t >> n; + return n; } /** @return The content of this node */ std::string content () const; + /** @return namespace URI of this node */ + std::string namespace_uri () const; + /** @return namespace prefix of this node */ std::string namespace_prefix () const; @@ -153,22 +195,36 @@ public: boost::shared_ptr optional_node_child (std::string) const; std::list > node_children (std::string) const; + + xmlpp::Node* node () const { + return _node; + } protected: - xmlpp::Node const * _node; + xmlpp::Node* _node; private: mutable std::list _taken; }; -class File : public Node +typedef boost::shared_ptr NodePtr; + +class Document : public Node { public: - File (std::string file, std::string root_name); - virtual ~File (); + Document (std::string root_name); + Document (std::string root_name, boost::filesystem::path); + + void read_file (boost::filesystem::path); + void read_stream (std::istream &); + + virtual ~Document (); private: + void take_root_node (); + xmlpp::DomParser* _parser; + std::string _root_name; }; }