00001
00002 #ifndef MiX_ATTRIBUTE_H_
00003 #define MiX_ATTRIBUTE_H_
00004
00005 #include "classes.h"
00006 #include "misc.h"
00007 #include "XMLString.h"
00008 #include "NamedNode.h"
00009 #include "Value.h"
00010 #include "extern/noncopyable.hpp"
00011
00012 namespace MiX{
00013
00014 template <class charT,class char_traits,class xml_traits>
00015 class Attribute : boost::noncopyable,
00016 public Value<charT,char_traits,xml_traits> ,
00017 public NamedNode<charT,char_traits,xml_traits>{
00018 public:
00019 MiX_Template_Typedef(charT,char_traits,xml_traits);
00020 typedef Attribute<charT,char_traits,xml_traits> this_type;
00021 typedef typename nodelist_type::iterator nodelist_iter;
00022 private:
00023 const static typename nodelist_type::iterator dmy_it;
00024 protected:
00031 Attribute(const string_type& name,const string_type ns,const string_type& val)
00032 : Value<charT,char_traits,xml_traits>(val),
00033 NamedNode<charT,char_traits,xml_traits>(name,ns){ };
00034 Attribute(const string_type& name,const string_type& val)
00035 : Value<charT,char_traits,xml_traits>(val),
00036 NamedNode<charT,char_traits,xml_traits>(name){ };
00037 public:
00039 virtual ~Attribute()throw() { };
00041 virtual NodeType getType()const { return Node_Attribute; };
00047 static NodeType type(){ return Node_Attribute; };
00048
00049 string_type getFullName() const;
00055 virtual string_type toString(bool dmy=false,int dmy2=0)const;
00056
00062 node_type& clone(nodecontainer_type& parent,const nodelist_iter& it=dmy_it) const
00063 { return create(getName(),getURL(),getValue(),parent); };
00064
00072 static this_type& create(const string_type& key,const string_type& val,nodecontainer_type& parent)
00073 { return this_type::create(key,string_type(),val,parent); }
00082 static this_type& create(const string_type& key,const string_type& ns,const string_type& val,nodecontainer_type& parent);
00083
00084 friend class DOM_Parser<charT,char_traits,xml_traits>;
00085 };
00086 }
00087
00088 #ifndef MiX_ATTRIBUTE_CPP_
00089 #include "Attribute.cpp"
00090 #endif
00091
00092 #endif