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 private:
00019 SAX_Parser<charT,char_traits,xml_traits> parser_;
00021 NodeContainer<charT,char_traits,xml_traits>* current_;
00023 void parseAttribute(const attrmap_type& attr);
00024 protected:
00026 virtual void onXMLDeclaration(attrmap_type attr);
00028 virtual void onStart(string_type name,attrmap_type attr);
00030 virtual void onEnd(string_type name);
00032 virtual void onText(string_type text);
00034 virtual void onComment(string_type text);
00035 public:
00037 virtual ~DOM_Parser(){ };
00038
00039
00046 void setIgnoreSpace(bool flag){ parser_.setIgnoreSpace(flag); };
00047 #ifndef MiX_BACKWARD_COMPATIBILITY
00048
00049 document_type* parse(const charT* text);
00050 #ifdef MiX_HAS_BASIC_STREAM
00051
00052 document_type* parse(std::basic_istream<charT, char_traits>& is);
00053 #endif//MiX_HAS_BASIC_STREAM
00054 #else//MiX_BACKWARD_COMPATIBILITY
00055
00056 document_type& parse(const charT* text);
00057 #ifdef MiX_HAS_BASIC_STREAM
00058
00059 document_type& parse(std::basic_istream<charT, char_traits>& is);
00060 #endif//MiX_HAS_BASIC_STREAM
00061 #endif//MiX_BACKWARD_COMPATIBILITY
00062 };
00063 }
00064
00065 #ifndef MiX_DOMPARSER_CPP_
00066 #include "DOM_Parser.cpp"
00067 #endif
00068
00069 #endif