00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00035 #ifndef OW_XMLPULLPARSER_HPP_INCLUDE_GUARD_
00036 #define OW_XMLPULLPARSER_HPP_INCLUDE_GUARD_
00037 #include "OW_config.h"
00038 #include "OW_AutoPtr.hpp"
00039 #include "OW_TempFileStream.hpp"
00040 #include "OW_String.hpp"
00041 #include "OW_XMLParserCore.hpp"
00042 
00043 #ifdef OW_HAVE_ISTREAM
00044 #include <istream>
00045 #else
00046 #include <iostream>
00047 #endif
00048 
00049 namespace OW_NAMESPACE
00050 {
00051 
00052 class OW_XML_API XMLPullParser
00053 {
00054 public:
00055    XMLPullParser(const String& str);
00056    XMLPullParser(std::istream& sb);
00057    XMLPullParser();
00058    virtual ~XMLPullParser();
00059 
00060    String mustGetAttribute(const char* const attrName) const
00061    {
00062       return getAttribute(attrName, true);
00063    }
00064    
00065    String getAttribute(const char* const attrName, bool throwIfError = false) const;
00066    void getChild();
00067    void mustGetChild();
00068    void getNextTag(bool throwIfError = false);
00069    void getNext(bool throwIfError = false);
00070    void mustGetNext()
00071    {
00072       getNext(true);
00073    }
00074    void mustGetNextTag()
00075    {
00076       getNextTag(true);
00077    }
00078    void mustGetEndTag();
00079    bool tokenIs(const char* const arg) const
00080    {
00081       return m_curTok.text.equals(arg);
00082    }
00083    String getName() const;
00084    String getData() const;
00085    bool isData() const;
00086 protected:
00087 
00088 #ifdef OW_WIN32
00089 #pragma warning (push)
00090 #pragma warning (disable: 4251)
00091 #endif
00092 
00093    AutoPtr<TempFileStream> m_ptfs;
00094 
00095 #ifdef OW_WIN32
00096 #pragma warning (pop)
00097 #endif
00098 
00099    XMLParserCore m_parser;
00100    XMLToken m_curTok;
00101    bool m_good;
00102 
00103    void prime();
00104    void nextToken();
00105    void skipData();
00106    
00107 private:
00108    
00109    XMLPullParser(const XMLPullParser& x);
00110    XMLPullParser& operator=(const XMLPullParser& x);
00111 
00112    friend OW_XML_API std::ostream& operator<<(std::ostream& ostr, const XMLPullParser& p);
00113 };
00114 
00115 } 
00116 
00117 #endif