00001
00002
00003 #ifndef MIX_DOMPARSER_H_
00004 #define MIX_DOMPARSER_H_
00005
00006 #include "classes.h"
00007 #include "DefaultXMLTraits.h"
00008 #include "SAX_Parser.h"
00009
00010 namespace MiX{
00011
00012 template <class charT,class char_traits,class xml_traits>
00013 class DOM_Parser : public SAX_EventHandler<charT,char_traits,xml_traits>{
00014 public:
00015 MiX_Template_Typedef(charT,char_traits,xml_traits);
00016 typedef DOM_Parser<charT,char_traits,xml_traits> this_type;
00017 typedef NodeContainer<charT,char_traits,xml_traits> nodecontainer_type;
00018 private:
00020 SAX_Parser<charT,char_traits,xml_traits> parser_;
00022 NodeContainer<charT,char_traits,xml_traits>* current_;
00024 void parseAttribute(const attrmap_type& attr);
00025 protected:
00027 virtual void onXMLDeclaration(attrmap_type attr);
00029 virtual void onStart(string_type name,attrmap_type attr);
00031 virtual void onEnd(string_type name);
00033 virtual void onText(string_type text);
00035 virtual void onComment(string_type text);
00036 public:
00038 virtual ~DOM_Parser(){ };
00039
00041 document_type& parse(const charT* text);
00043 document_type& parse(std::basic_istream<charT, char_traits>& is);
00044
00051 void setIgnoreSpace(bool flag){ parser_.setIgnoreSpace(flag); };
00052 };
00053 }
00054
00055 #ifndef MiX_DOMPARSER_CPP_
00056 #include "DOM_Parser.cpp"
00057 #endif
00058
00059 #endif