00001
00002
00003 #ifndef MiX_DOCUMENT_H_
00004 #define MiX_DOCUMENT_H_
00005
00006 #include "classes.h"
00007 #include "misc.h"
00008 #include "XMLString.h"
00009 #include "extern/noncopyable.hpp"
00010
00011 namespace MiX{
00012
00013 template <class charT,class char_traits,class xml_traits>
00014 class Document : boost::noncopyable,
00015 public NodeContainer<charT,char_traits,xml_traits>{
00016 public:
00017 MiX_Template_Typedef(charT,char_traits,xml_traits);
00018 typedef Document<charT,char_traits,xml_traits> this_type;
00019 typedef typename nodelist_type::iterator nodelist_iter;
00020 typedef NodeContainer<charT,char_traits,xml_traits> nodecontainer_type;
00021 private:
00022 const static typename nodelist_type::iterator dmy_it;
00023 protected:
00030 Document() { };
00031 public:
00033 virtual ~Document()throw() { };
00035 virtual NodeType getType() const{ return Node_Document; };
00041 static NodeType type(){ return Node_Document; } ;
00043 element_type& getRoot()const;
00050 virtual string_type toString(bool is_indent=false,int indent_off=0)const;
00057 attribute_type& operator[](const string_type& name){
00058 return getAttribute(name);
00059 }
00063 node_type& clone(nodecontainer_type& dmy,const nodelist_iter& it=dmy_it)const { return clone(); }
00064
00068 node_type& clone() const;
00075 static this_type& create(const string_type& rootname);
00076
00077 friend class DOM_Parser<charT,char_traits,xml_traits>;
00078 };
00079 }
00080
00081 #ifndef MiX_DOCUMENT_CPP_
00082 #include "Document.cpp"
00083 #endif
00084
00085 #endif